关键:输出分2种,标准输出和错误输出,获取正确的输出流才能取到想要的结果
Runtime.exec() 在windows中执行命令的时候,在cmd中能看到输出,但是代码却读取不到,应为我们通常用标准输出流,结果就是读不到结果为null
代码一直等着。也就是为什么我们用 cmdxx 1>result.log 无结果 cmdxx 2>result.log 却能取到结果,1是标准输出 2错误输出
错误输出流例子
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = <span style="color:#ff0000;">new InputStreamReader(stderr); </span>
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
}
标准输出流例子
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("dir");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = <span style="color:#ff0000;">new InputStreamReader(stdin); </span>
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</OUTPUT>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
}
参考:http://berdy.iteye.com/blog/810223