JAvaでProcessで外部コマンドを実行して問題を解決する方法
Javaで外部コマンドを呼び出すので、次のコードを書きました.
実行された外部コマンドに出力がない場合、このコードは正常に動作しますが、実行された外部コマンドに出力がある場合、このプログラムは停止します.ストリームが読み込まれていないために詰まりが発生したと推定され、コードを
すべて正常です.
Process p = Runtime.getRuntime().exec("my command ...");
int c = p.waitFor();
if (c != 0)
{
System.out.prinln(" ");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
for (String line = br.readLine(); line != null; line = br.readLine())
{
System.out.println(line);
}
}
実行された外部コマンドに出力がない場合、このコードは正常に動作しますが、実行された外部コマンドに出力がある場合、このプログラムは停止します.ストリームが読み込まれていないために詰まりが発生したと推定され、コードを
public void test() throws IOException, InterruptedException
{
Process p = Runtime.getRuntime().exec("command...");
String errorMsg = readInputStream(p.getErrorStream());
String outputMsg = readInputStream(p.getInputStream());
int c = p.waitFor();
if (c != 0)
{
System.out.println(" :" + errorMsg);
}else
{//print command output
System.out.println(outputMsg);
}
}
private String readInputStream(InputStream is) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer lines = new StringBuffer();
for (String line = br.readLine(); line != null; line = br.readLine())
{
lines.append(line);
}
return lines.toString();
}
すべて正常です.