ProcessBuilder和Runtime.getRuntime().exec()

如果你想要在Java中运行命令行程序,首先让你想到的就是:
 
1. 调用ProcessBuilder的构造函数后执行start()
2. 用Runtime.getRuntime().exec()方法执行
 
那么这两种方法有什么区别呢?我们以要在linux下使用ifconfig命令并读出输出为例:
 
1.调用ProcessBuilder的构造函数后执行start():
 
Process process = new ProcessBuilder("ifconfig").redirectErrorStream(true).start();
OutputStream stdout = process.getOutputStream();
InputStream stdin = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdin));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdout));
 
2.Runtime.getRuntime().exec()方法执行:
 
Process process = Runtime.getRuntime().exec("ifconfig");
OutputStream stdout = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdin = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdin));
BufferedReader err= new BufferedReader(new InputStreamReader(stderr));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdout));
 
从上面两段代码,可以看出最明显的不同:
使用ProcessBuilder,可以通过redirectErrorStream(true)将错误输出流转移到标准输出流中,这样我只需使用一次process.getOutputStream()就能读出该进程的所有输出。而使用Runtime.getRuntime().exec()方法时,错误的输出流还需通过process.getErrorStream()来获得。
posted on 2015-08-12 17:08  hi_rain  阅读(2079)  评论(0)    收藏  举报