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));
InputStream stdin = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdin));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdout));
2.用Runtime.getRuntime().exec()方法执行:
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));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdout));
从上面两段代码,可以看出最明显的不同:
使用ProcessBuilder,可以通过redirectErrorStream(true)将错误输出流转移到标准输出流中,这样我只需使用一次process.getOutputStream()就能读出该进程的所有输出。而使用Runtime.getRuntime().exec()方法时,错误的输出流还需通过process.getErrorStream()来获得。
浙公网安备 33010602011771号