# Ausgabe in HTML :(



## TimoYo (14. Okt 2015)

Hallo zusammen,

ich bin absoluter Einsteiger in Java und habe vor 3 Tagen ein Studium begonnen.
Die erste Aufgabe ist es, dem Prof ne .java zu schicken, die ein paar Persönliche Dinge ausgibt.

Sieht bei mir jetzt so aus und funktioniert auch wunderbar in der MS DOS Konsole:


```
/**
* Dateiname    : Einsendeaufgabe1.java
* Beschreibung : Ausgabe persönlicher Daten
* Java-Version    : 1.8.0_60
*
* @author      TP
* @version     1.0, 14.10.2015
*/
public class Einsendeaufgabe1{

  public static void main(String[] args)
  {
      //nachstehend die Ausgabe in MS DOS:
        System.out.println( "Hallo!");
        System.out.println( "Mein Name ist...");
        System.out.println( "Ich wohne...");
  }

}
```

Problem ist, als Verschärfung der Aufgabe möchte er, dass wenn er mit


```
java Einsendeaufgabe1 > ergebnis.html
```

daraus die .html-Datei erstellt,* diese auch tolle Farben enthält.* Er möchte Name in rot, Straße blau usw.

Mein Ansatz war es jetzt, direkt in der Datei HTML-Code einzubauen, also:


```
System.out.println( "<span style="color:#FF0000;">Hallo!</span>");
```

Das funktioniert zu meiner Verwunderung auch wunderbar, aber leider steht der HTML-Code dann auch in der MS DOS Konsole 

Was kann ich also tun, damit die Inhalte in MS DOS normal ausgespuckt werden, aber nach Umleitung der Ausgabe in eine .html Datei eine saubere HTML-Struktur vorliegt inklusive den Farben?

Ich hoffe ihr versteht mich und könnt helfen (
Danke!!!


----------



## Joose (14. Okt 2015)

Naja mit "System.out.println" schreibst du alles nur auf die Konsole 1:1

Aber schau dir den Aufruf mit dem HTML mal genauer an:

```
java Einsendeaufgabe1 > ergebnis.html
```

Mittels "java Einsendeaufgabe1" rufst du dein Java Programm auf und diese schreibt Sachen auf die Konsole. Mit " > ergebnis.html" soll die Ausgabe in die Datei "ergebnis.html" umgeleitet werden.
Sprich es wird eine HTML Datei erzeugt welche die Konsolenausgabe aus deinen Programm enthält.

Wie hast du denn deinen Code aufgerufen? Eh mit dem Zusatz " > ergebnis.html"?


----------



## TimoYo (14. Okt 2015)

Hallo und Danke für die Antwort.

Also meine Aufgabe ist es praktisch dem Prof java-Quellcode zu senden. Zum prüfen ob er vernünftig funktioniert, sollen wir über Windows > cmd den Pfad suchen und den Befehl "java Einsendeaufgabe1" eingeben. Dort gibt er mir dann auch alle Daten wunderbar aus.

Mein Prof wird aber zusätzlich über Windows > cmd den Befehl "java Einsendeaufgabe1 > ergebnis.html" eingeben, um sich also aus meinem java Quellcode eine Html-Datei zu erzeugen.

Diese Html-Datei soll dann schick formatiert sein, wie man es eben kennt mit <head><body> Tags usw. und eben den Inhalt in diversen Farben.

Ich weiß aber nicht, wo ich im Java Quellcode HTML-Farbcode hinterlegen kann und ob überhaupt.

Gruß


----------



## TimoYo (14. Okt 2015)

Ziel ist praktisch, dass in der Konsole nicht z.B. "<strong>Hallo</strong>" ausgegeben wird, sondern eben nur "Hallo". Dafür nach dem Umleiten in HTML, das Hallo aber trotzdem fett dargestellt wird.


----------



## TimoYo (14. Okt 2015)

Hier mal die Aufgabenstellung
(bitte entschuldigt den 3. Post hintereinander...)


----------



## Joose (14. Okt 2015)

TimoYo hat gesagt.:


> Ziel ist praktisch, dass in der Konsole nicht z.B. "<strong>Hallo</strong>" ausgegeben wird, sondern eben nur "Hallo". Dafür nach dem Umleiten in HTML, das Hallo aber trotzdem fett dargestellt wird.



Das wird nicht funktionieren so wie du es dir denkst.

*java Einsendeaufgabe1* und *java Einsendeaufgabe > ausgabe.html* führen beide das gleiche Programm aus. Der Unterschied besteht nur für die Windowskonsole.
Beim Ersten gibt er alles direkt auf der Windowskonsole aus, beim zweiten leitet er diese Ausgabe in eine Datei mit den Namen _ausgabe.html_ um.

Dein Programm wird in beiden Fällen genau gleich ablaufen. Sprich dein Programm muss natürlich schon HTML auf der Konsole ausgeben, damit die Aufgabe richtig erledigt wird.

*So steht es auch in der Aufgabenstellung:
"Gestalten Sie die Ausgabe als korrektes HTML, so dass sich bei Umleitung der Ausgabe in eine Datei ......"*


----------



## TimoYo (14. Okt 2015)

Dann kann ich also mein css in den javaquelltext einbauen?
Ergebnis html -> perfekt
Ergebnis konsole -> unschön, da voller code

nagut.
ich dachte das geht schöner zu lösen, aber ich verstehe deinen Einwand, dass beim Umleiten praktisch eine Kopie der Konsolenausgabe gemacht wird.

Danke!


----------



## Joose (14. Okt 2015)

Natürlich kann man hier etwas tricksen, aber dann musst du deinen Programm auch einen Parameter mitgeben, welcher ihm sagt "jetzt schreibe ich auf die Konsole" bzw. "füge HTML Tags hinzu ich werde umgeleitet".
Aber das ist laut Aufgabe nicht gefordert


----------



## TimoYo (14. Okt 2015)

Ah okay! Vielen Dank für die Info, das es möglich wäre.
Und vielen Dank für die Hilfe davor. Ich setze es nun so um.


----------



## MWin123 (14. Okt 2015)

Ich denke das hier ist gesucht:

```
public class Einsendeaufgabe1 {

    public static void main(String[] args) {
        if (args[0].equals(">")) {
            System.out.println("<span style=\"color:#FF0000;\">Hallo!</span>");
        } else {
            System.out.println("Hallo!");
        }
    }
}
```

Wenn das Programm mit "java Einsendeaufgabe1 > ergebnis.html" aufgerufen wird, dann gibst du die HTML Tags aus, sonst eben nicht.
Statt der Ausgabe auf der Konsole könntest du ja direkt in ein File schreiben.


----------



## TimoYo (14. Okt 2015)

```
/**
* Dateiname    : Einsendeaufgabe1.java
* Beschreibung : Ausgabe persönlicher Daten
* Java-Version    : 1.8.0_60
*
* @author      TP
* @version     1.0, 14.10.2015
*/
public class Einsendeaufgabe1{

  public static void main(String[] args)
  {
      //Umleitung der Ausgabe in korrektes HTML(5):
      System.out.println( "<!DOCTYPE html>");
      System.out.println( "<html>");
      System.out.println( "<head>");
      System.out.println( "<meta charset="UTF-8">");
      System.out.println( "<title>Einsendeaufgabe1</title>");
      System.out.println( "</head>");
      System.out.println( "<body>");
            System.out.println( "Hallo!");
            System.out.println( "Mein Name ist <span style="color:#00FFFF; background-color:#FF0000;">TP</span>,");
            System.out.println( "ich wohne in der <span style="color:#FF00FF; background-color:#00FF00;">Straße 66</span> in <span style="color:#FFFF00; background-color:#0000FF;">22222 Hamburg.</span>");
            System.out.println( "Sie erreichen mich per Email an <span style="color:#00FF00; background-color:#FF00FF;">egal@egal.de</span>");
            System.out.println( "oder telefonisch unter <span style="color:#FF0000; background-color:#00FFFF;">123</span>");
            System.out.println( "zwischen <span style="color:#0000FF; background-color:#FFFF00;">09:00 und 21:00 Uhr.</span>");
      System.out.println( "</body>");
      System.out.println( "</html> ");

  }



}
```

Tja jetzt hab ich mir das so einfach vorgestellt, aber das mag javac gar nicht 
Liegt vor allem an " " innerhalb andren " ", sowie den Rauten #.

Was tu ich denn nun?


----------



## TimoYo (14. Okt 2015)

Achso läuft das, danke MWin, dann vergiss den Post hierdrüber


----------



## MWin123 (14. Okt 2015)

Achtung, die Anführungszeichen in den HTML Tags musst du escapen. Sonst denkt der Compiler dein String ist bereits zu Ende.
Also `\"`.

So würdest du direkt ein html File erstellen:

```
import java.io.*;

public class Einsendeaufgabe1 {

    public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {

        if (args[0].equals(">")) {
            File htmlFile = new File(args[1]);
            PrintWriter printWriter = new PrintWriter(htmlFile, "UTF-8");

            printWriter.println("<span style=\"color:#FF0000;\">Hallo!</span>");
            printWriter.println("Mein Name ist <span style=\"color:#00FFFF; background-color:#FF0000;\">TP</span>,");

            printWriter.close();

        } else {
            System.out.println("Hallo!");
        }
    }
}
```
Einfach `printWriter.println()` statt `System.out.println()`.
Aber wahrscheinlich kennst du noch keine Exceptions, wenn du gerade erst anfängst mit dem Programmieren.


----------



## TimoYo (14. Okt 2015)

Nein, Exception sagt mir noch nichts.
Das escapen hat aber wunderbar geholfen, die html sieht soweit gut aus (wie man sichs vorstellt).
Besten Dank für den Tip!


----------



## Joose (14. Okt 2015)

MWin123 hat gesagt.:


> Wenn das Programm mit "java Einsendeaufgabe1 > ergebnis.html" aufgerufen wird, dann gibst du die HTML Tags aus, sonst eben nicht.
> Statt der Ausgabe auf der Konsole könntest du ja direkt in ein File schreiben.



Ich bin mir gerade nicht ganz sicher aber ich glaube wenn ich auf der Windowskonsole "> [FILENAME]" verwende wird der OutputStream des Programmes auf die Datei umgeleitet.
Sprich das Programm bekommt keinen Parameter mitgegeben.


----------



## JStein52 (15. Okt 2015)

@Joose : Ja du vermutest richtig. Das Programm kriegt dann keine Parameter ! Meines Erachtens kann er nicht feststellen ob die Ausgabe umgelenkt wurde. Aber vielleicht findet einer noch einen Trick


----------



## taro (16. Okt 2015)

JStein52 hat gesagt.:


> @Joose : Ja du vermutest richtig. Das Programm kriegt dann keine Parameter ! Meines Erachtens kann er nicht feststellen ob die Ausgabe umgelenkt wurde. Aber vielleicht findet einer noch einen Trick



Muss er auch gar nicht feststellen - die Aufgabenstellung sagt lediglich, dass bei Umleitung ein korrektes HTML-Dokument vorliegen, aber nicht, dass die Konsolenausgabe passen soll ...


----------



## Xyz1 (16. Okt 2015)

flag HTML mitgeben, das hat jetzt nichts mit einer Flak zu tun.
eine andere Möglichkeit gibt es leider nicht.


----------



## InfectedBytes (16. Okt 2015)

Man kann mit einem kleinen Trick sehr wohl prüfen ob umgeleitet wurde. 
Denn wenn die Ausgabe umgeleitet wurde, so liefert ein Aufruf von System.console() null zurück, andernfalls ein Console objekt.

```
boolean umleitung = System.console() == null;
if(umleitung) {
  // html
} else {
  // kein html
}
```

Allerdings muss man aufpassen, da viele IDEs die Ausgabe selbst umleiten. 
Wenn man das Programm z.B. aus Eclipse startet, so erhält man dort auch null zurück!


----------



## Xyz1 (16. Okt 2015)

Leider gibt's die Klasse erst seit 1.6
Zudem, was passiert mit std.err , was theoretisch nicht umgeleitet wird
Eclipse emuliert eine Console, jemand müsste es mal wagen , und aus Netbeans heraus starten
Aber wenn der Prof eine .java hab'n möchte, das ist tatsächlich so üblich, wird er auch gerade cli compile & start/run machen , zumal jemand oben MS DOS erwähnt hatte


----------

