ProcessBuilderでバッチファイルを起動し、そのバッチファイルが標準出力に出力した内容をJavaで読み取りたいのですがうまくいきません。
コマンドと引数を出力した行は取得できるのですが、肝心の処理結果の出力行が取得できません。
プログラムに間違いがあるのでしょうか?アドバイスお願いします。
■バッチファイル
java -version
■Java
ProcessBuilder pb = new ProcessBuilder("C:\\test.bat");
Process p = pb.start();
p.waitFor();
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try {
for (;;) {
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
} finally {
br.close();
}
■実行結果
C:\>java -version
java -version の場合、出力結果は標準出力ではなくエラー出力に吐き出されます。
ですので、getInputStream() ではなく getErrorStream() を使うと処理結果が取得できます。
ちなみに処理方法は getInputStream() と同様です。
回答ありがとうございます。
標準エラー出力だとは思いませんでした。
標準出力と標準エラー出力を混在させてもよいのなら、ProcessBuilder#redirectErrorStream を使ってもよいです。
以下のように一行追加するだけで済みます。
>|java|
ProcessBuilder pb = new ProcessBuilder("C:\\test.bat");
pb.redirectErrorStream(true);
Process p = pb.start();
...
||<
回答ありがとうございます。
こういう方法もあるんですね。勉強になります。
回答ありがとうございます。