人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaのProcessBuilderについて質問です。
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

●質問者: Gaasu
●カテゴリ:コンピュータ
✍キーワード:br Java Out PB Readline
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●27ポイント

Process の waitFor() って、要らないんじゃないかな。

◎質問者からの返答

回答ありがとうございます。


2 ● nattow
●27ポイント

java -version の場合、出力結果は標準出力ではなくエラー出力に吐き出されます。

ですので、getInputStream() ではなく getErrorStream() を使うと処理結果が取得できます。

ちなみに処理方法は getInputStream() と同様です。

◎質問者からの返答

回答ありがとうございます。

標準エラー出力だとは思いませんでした。


3 ● nattow
●27ポイント

標準出力と標準エラー出力を混在させてもよいのなら、ProcessBuilder#redirectErrorStream を使ってもよいです。

以下のように一行追加するだけで済みます。

>|java|

ProcessBuilder pb = new ProcessBuilder("C:\\test.bat");

pb.redirectErrorStream(true);

Process p = pb.start();

...

||<

◎質問者からの返答

回答ありがとうございます。

こういう方法もあるんですね。勉強になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ