# Konsolenausgabe in Textdatei umleiten



## TomSto (17. August 2004)

Ich versuche gerade den Inhalt der Konsole in die TExtdatei umzuleiten und habe da ein paar Probleme:



Zitat:
--------------------------------------------------------------------------------
Original geschrieben von Thomas Darimont 



Code:
--------------------------------------------------------------------------------

FileWriter fw = new FileWriter(new OutputStreamWriter(System.out));
...
fw.flush();
fw.close();




--------------------------------------------------------------------------------



Gruß Tom 
--------------------------------------------------------------------------------



Bei der Initialisierung die Tom hier verwendet bekomme ich folgenden Fehler:

The constructor FileWriter(OutputStreamWriter) is undefined

Ich habe es mal so probiert:


Code:
--------------------------------------------------------------------------------

                     FileWriter fw = null;
    	OutputStreamWriter out = null;
try
      {
          out = new OutputStreamWriter (System.out);
          fw = new FileWriter(Dateiname);
          fw.write(out.flush());
          out.close();
          fw.close();

      }//try



--------------------------------------------------------------------------------



Von meinem Verständins her, denke ich mir das so:
mit fw.write schreibe ich in das Textfile, mit out.flush() den Inhalt der Konsole/der noch gepufferten Daten.

nur leider bekomme ich fw.write(out.flush()); eine Fehlermeldung:

The method write(int) in the type OutputStreamWriter is not applicable for the arguments (void).

Kann mir bitte jemand weiterhelfen?!

Danke!


----------



## Thomas Darimont (17. August 2004)

Hallo!

Hmmm seltsam, das funktionierte mal ...

dann nimm eben das hier:


```
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

public class FileLogger {

	public static void main(String[] args) {
		File file = new File("C:/java.log");
		try {
			System.setOut(new PrintStream(new FileOutputStream(file,true)));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

		System.out.print(System.currentTimeMillis());
		System.out.print(": ");
		System.out.print("Hallo");
		System.out.println(" Welt!");
	}
}
```
Gruß Tom


----------



## squeaker (17. August 2004)

Du kannst das Programm auch von der Konsole mit

java programm.jar > textdatei.txt

ausführen. dann wird die ganze Konsolenausgabe in die Textdatei geschrieben.


----------



## TomSto (17. August 2004)

Danke Tom, funktioniert nun.

Habe noch eine Frage... 

Die Konsolenausgabe wird ja nun dirket in die Textdatei umgeleitet. 
Leider erfolgt keine Konsolenausgabe an sich mehr. 
Ich sollte aber folgendes Programmieren:

Das Programm liefert das Ergbnis als Konsolenausgabe. Dann soll eine Abfrage kommen, ob man die Ausgabe speichern möchte. Bei ja, soll dann die Ausgabe in eine Textdatei geschrieben werden.

Kann ich das realisieren? 
Die Abfrage habe ich schon programmiert. Ausgabe auch...  
nur ist der Rest möglich? 



> _Original geschrieben von squeaker _
> *Du kannst das Programm auch von der Konsole mit
> 
> java programm.jar > textdatei.txt
> ...



Danke für den Tipp, nur leider muss ich aus dem Programm eine exe machen und zuerst die Ausgabe in der Konsole und dann in die TXT. 

gruss


----------



## teppi (17. August 2004)

Wenn du dir Thomas seinen Code in dem anderen Thread anschaust, den du zu diesem Thema erstellt hast, findest du eine Möglichkeit die Konsoleneingabe bei Eingabe eines bestimmten Schlüsselbegriffs zu beenden etc. 

Ich finde, ein bisschen selbst nachdenken, wäre schon angebracht 

Viel Spaß beim EXE erstellen ..


----------



## TomSto (17. August 2004)

Servus !



> _Original geschrieben von teppi _
> *Wenn du dir Thomas seinen Code in dem anderen Thread anschaust, den du zu diesem Thema erstellt hast, findest du eine Möglichkeit die Konsoleneingabe bei Eingabe eines bestimmten Schlüsselbegriffs zu beenden etc.
> *



Was Du meinst ist wohl:
String exitCode = "EXIT";

Das ist aber nicht was ich benötige....

Mein Programm liefert folgende Konsolenausgabe:

Auswertung der Datei: ping.txt
Startzeit: 14:16:31
Endzeit: 21:28:25
______________________
Anzahl loss   0%: 1206
Anzahl loss  10%: 2
Anzahl loss  20%: 0
Anzahl loss  30%: 0
Anzahl loss  40%: 0
Anzahl loss  50%: 0
Anzahl loss  60%: 0
Anzahl loss  70%: 0
Anzahl loss  80%: 0
Anzahl loss  90%: 0
Anzahl loss 100%: 0
____________________
Insgesamt wurden 1208 Durchlaeufe ausgefuehrt.
Moechten Sie das Ergebnis speichern? (j/n)

Nun habe ich eine Abfrage eingebaut, um abzufragen, ob eine Speicherung des Ergebnisses erwünscht ist. 
Falls ja, dann soll die obige Konsolenausgabe in ein Textfile geschrieben werden.

Wenn ich Tom's Beisepiel benutze, bekomme ich die Konsolenausgabe in ein Textfile, jedoch bleibt die eigentliche Ausgabe innerhalb der Konsole aus.
Meine einziger Lösungsatz wäre der, das ich bei der "ja" Auswahl die Konsolenausgabe nocheinmal durchlaufen lasse, aber dieses mal dann direkt in das Textfile. Ist etwas umständlich. 
Daher meine Frage, ob dass denn auch noch anderst funktioniert. 

gruss


----------



## teppi (17. August 2004)

Du kannst dir Strings einfach in bspw. einem StringBuffer bis zum Ende zwischenspeichern .. und bei "JA" schreibst du den Inhalt eben in eine Datei  ... Problematisch wird das dann nur wegen den Zeilenumbrüchen .. aber da gibts bspw. beim BufferedWriter die Methode newLine() ..


----------



## TomSto (17. August 2004)

Hi,

wie kann ich den 
System.setOut(new PrintStream(new FileOutputStream(textfile,true)));
wieder beenden, damit ich anschliessend wieder in der Konsole ausgeben kann?
habe es jetzt mit einer wiederholung gelöst und möchte noch eine kleine info in der konsole ausgeben, damit erfolgreich gespeichert wurde?! 

danke!


----------



## TomSto (17. August 2004)

Normalerweise müsste doch so etwas wie:
.close() funktionieren.

Nur leider finde ich kein Objekt, welches ich schliessen kann. 
--> System.setOut(new PrintStream(new FileOutputStream(textfile,true)));
bei nem BufferedReader o.ä. ist dies ja ohne Problem möglich, da ich ein Objekt ja zuerst instantiere...
BufferedReader br = new ...
br.close....

Muss ich jetzt zuerst ein System.setIn() machen, damit ich wieder normal in der Konsole ausgeben kann?
oder liege ich total falsch?

gruss


----------

