javaプログラムからバッチプロセスを実行するためにcommon-exe非同期の方法を使用しようとしています。これにより、実行時にのみバッチプロセスからの出力ストリームを読み取って処理できます。
このコードがプロセスを非同期的に実行することを学びました
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
CommandLine cmdLine = new CommandLine("some batch file");
Executor executor = new DefaultExecutor();
executor.execute(cmdLine, resultHandler);
しかし今、私の問題は、実行と並行してバッチファイルからアウトストリームを読み取る方法です。出力ストリームからの情報を処理する必要があります。
これが私が試しているコードです。問題を解決する方法がわかりません。
String command = "some batch file.bat";
PipedOutputStream pipedOutputStream = new PipedOutputStream();
PumpStreamHandler pumpStreamHandler = new PumpStreamHandler(pipedOutputStream);
CommandLine commandLine = null;
DefaultExecutor defaultExecutor = new DefaultExecutor();
DataInputStream dataInputStream = null;
DefaultExecuteResultHandler executeResultHandler = new DefaultExecuteResultHandler();
commandLine.parse(command);
try {
dataInputStream = new DataInputStream(new PipedInputStream(pipedOutputStream));
defaultExecutor.setStreamHandler(pumpStreamHandler);
defaultExecutor.execute(commandLine, executeResultHandler);
InputStream outCmdStream = null;
pumpStreamHandler.setProcessOutputStream(outCmdStream);
InputStreamReader outCmdReader = new InputStreamReader(outCmdStream);
BufferedReader outCmdBufReader = new BufferedReader(outCmdReader);
String procOutputStr;
while ((procOutputStr = dataInputStream.readLine()) != null) {
System.out.println(procOutputStr);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR.RUNNING.CMD");
e.printStackTrace();
System.out.println("ERROR.RUNNING.CMD");
}