2013-09-07 2 views
8

Ich möchte die Java-Konsole-Ausgabe (generiert von System.out.println und seiner Art) in eine Datei pipe. Ich habe eine ausgezeichnete Lösung gefunden here, Java-Tracing zu aktivieren, aber das funktioniert nicht für mich (keine Protokolldatei wird an einem beliebigen Ort auf Mac OS X oder Windows angezeigt). Soweit ich das beurteilen kann, verwende ich eine einfache Java-App ohne Java-Webstart. Wie kann ich das mit Java-Code machen, der Java Web Start nicht benutzt? Im Idealfall möchte ich eine Lösung, die keine Änderung des Codes erfordert.Wie kann ich die Java Console-Ausgabe in eine Datei ohne Java Web Start leiten?

+0

'System.setOut()'. –

+0

Gibt es eine Möglichkeit, dass ich es tun kann, ohne den Code zu ändern? Ich würde es gerne für eine bereits kompilierte Anwendung tun, ohne sie neu kompilieren zu müssen. – Thunderforge

Antwort

17

Sie benötigen keinen Java-Webstart, um dies zu tun. Stellen Sie einfach System.out auf .

System.setOut(new PrintStream(new FileOutputStream(fileName))); 

wo fileName ist der vollständige Pfad zur Datei, die Sie Rohr zu wollen.

public static void main(String[] args) throws Exception { //Read user input into the array 
    System.setOut(new PrintStream(new FileOutputStream("home.txt"))); 
    System.out.println("hello"); 
} 

Wird hello\n in eine Datei home.txt im aktuellen Arbeitsverzeichnis genannt schreiben. Wenn Sie den Code unter Windows 7 nicht ändern können, verwenden Sie command redirection.

java YourMainClass > home.txt 

Wenn Sie ein Glas laufen müssen, können Sie die -jar Option des java application launcher verwenden.

java -jar /your/path.jar > /output/file/path.txt 
+0

Ich bin mir nicht sicher, worauf sich "YourMainClass" bezieht. Ist es die kompilierte JAR-Datei oder etwas anderes? – Thunderforge

+0

@Thunderforge Wenn Sie ein Jar haben, führen Sie den Befehl jar aus. Wenn Sie eine Klasse mit 'main()' haben, führen Sie sie direkt aus. –

+0

Ich habe versucht, den Befehl 'jar' anstelle von' java' auszuführen, wie Sie vorgeschlagen haben, aber 'jar /Applications/Test.app/Contents/Resources/Java/jar_0.jar> ~/Desktop/Test.txt' resultierte in' Illegale Option:/'und dann eine ganze Reihe von Informationen über akzeptable Parameter, von denen keine sofort relevant erschien. – Thunderforge

1

Is there any way that I can do it without modifying code? I'd like to do it for an application that is already compiled.

Wenn Sie es ohne Änderung Code tun wollen, dann ist die beste Wahl dieses:

$ java com.example.MyMainClass > filename 
+0

Versuchte '$ java/Anwendungen/Test.app> ~/Desktop/Test.txt' auf Mac OS X im Terminal, aber bekam "Fehler: Konnte Hauptklasse .Applications.Test.app nicht finden oder laden" – Thunderforge

+0

@Thunderforge - Das ist, weil Sie einen Klassennamen nicht zur Verfügung stellen müssen ein Pfadname Hinweis: Ein Klassenname enthält keine Schrägstriche. Wenn Sie dies verwirren, nehmen Sie sich bitte die Zeit, den manuellen Eintrag für den 'java'-Befehl zu lesen. –

+0

Am besten kann ich sagen, was ich vor zweieinhalb Jahren dachte, ich war verwirrt, weil die 'some.pkg.App' der Name einer OS X-App war (mit der Erweiterung' .app', äquivalent zu einer Windows .exe). Da ich eine Java-App als Mac OS X-App ausgeführt habe, habe ich es versucht. Ich habe Ihr Beispiel verdeutlicht, um diese Verwirrung zu beseitigen. – Thunderforge

15

Wenn Sie es von der Kommandozeile starten, dann können Sie stdout und stderr verwenden umleiten wie folgt in die Datei:

java -jar application.jar >file.txt 2>&1 

wo Sie application.jar ersetzen mit der JAR-Datei Ihrer Anwendung.

Verwandte Themen