Kann man die Klasse Out verwenden, um Ausgaben sowohl auf die Konsole als auch in eine Datei zu schreiben?

Nein, die gleichzeitige Ausgabe auf die Konsole und in eine Datei geht mit Klasse Out nicht. Wir möchten das anhand der folgenden Code-Sequenz erklären.

Out.println("hallo 1");
Out.open("myFile.txt");
Out.println("hallo 2");
Out.close();
Out.println("hallo 3");
Out.open("myFile.txt");
Out.println("hallo 4");
Out.close();

Initial zeigt der PrintStream auf System.out. Schreibt also auf die Konsole. Öffnet man mit Out.open() einen weiteren PrintStream s2 wird der aktuelle PrintStream s1 auf einem Stack abgelegt und s2 wird für die Ausgabe verwendet. Schließt man s2, wird s1 wieder zum aktuellen PrintStream.

Zeile 1: Die Ausgabe “hallo 1” erfolgt über den PrintStream System.out auf die Konsole.
Zeile 2: Ab hier wird als PrintStream ein FileOutputStream verwendet.
Zeile 3: In die Datei myFile.txt wird “hallo 2” geschrieben.
Zeile 4: Der FileOutputStream wird geschlossen. Der PrintStream zeigt wieder auf System.out.
Zeile 5: Auf der Konsole wird “hallo 3” ausgegeben.
Zeile 6: Ab hier wird wieder ein FileOutputStream als PrintStream verwendet.
Zeile 7: In die Datei myFile.txt wird “hallo 4” geschrieben. Dieser Text wird allerdings nicht an den bereits vorhandenen Inhalt der Datei angehängt, sondern überschreibt diesen.


Wie man in Java die gleichzeitige Mehrfachausgabe auf die Konsole und in eine Datei umsetzen kann, wird in der folgenden Code-Sequenz gezeigt.

PrintStream ps = new PrintStream(new FileOutputStream("myFile.txt"));

String s = "Hello World!";
ps.println(s);
System.out.println(s);
...
ps.close();