Ich habe die folgende Windows-Batch-Datei (run.bat):Wie kann ich Rohr Prozess Ausgabe in eine Datei unter Windows und JDK 6u45
@echo off
echo hello batch file to sysout
und den folgenden Java-Code, der die Batch-Dateien und Umleitungen läuft Ausgabe in eine Datei:
public static void main(String[] args) throws IOException {
System.out.println("Current java version is: " + System.getProperty("java.version"));
ProcessBuilder pb =
new ProcessBuilder("cmd.exe", "/c",
"run.bat"
,">>", "stdout.txt","2>>", "stderr.txt"
);
System.out.println("Command is: " + pb.command());
Process proc = pb.start();
InputStream in = proc.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitValue = proc.exitValue();
System.out.println("Exit value: " + exitValue);
}
auf JDKs bis einschließlich JDK6u43 ich folgende Ausgabe:
Current java version is: 1.6.0_29
Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]
Exit value: 0
und Die Skriptausgabe wird in die Datei geschrieben. Ab JDK 6u45 und 7, erhalte ich die folgende Ausgabe:
Current java version is: 1.6.0_45
Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]
hello batch file to sysout
Exit value: 0
Und nichts in die Ausgabedatei geschrieben wird. http://www.oracle.com/technetwork/java/javase/6u45-relnotes-1932876.html
Was ist der richtige Weg unter Windows einen Prozess, beginnend mit Ausgabe auf Dateien umgeleitet wird:
Dies sein kann oder nicht auf die in Runtime.exec(), beschrieben bei Änderungen im Zusammenhang?
Hinweis: In einem realen Szenario, das Kommando auszuführen kann Parameter mit Leerzeichen enthält, wie in:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",
"run.bat", "Some Input With Spaces",
">>", "stdout.txt","2>>", "stderr.txt");
Hilft es, alle Befehlszeile args rechts von '\ c 'in eine kombinieren einzelne arg? –
Dies funktioniert nur, wenn ich keine Leerzeichen in den Argumenten habe, die an das Skript übergeben werden. – Barak