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); } } privateString 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(); }
一切正常。
页:
[1]