我要在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();
}
一切正常。