ProcessBuilder優點
ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要優點在使用過程中感受有:
- 前者是jdk1.5后的新方式
- 配置環境變量時更優雅
- 對當前目錄的控制也更合理
- 錯誤流重定向特別方便?
- 進程控制更簡潔
ProcessTool.java
package test;import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.Map;/*** * @author King* @see* @version createTM:2017年11月23日 下午3:41:38*/ public class ProcessTool {public static void main(String[] args) throws IOException {execWindowCmd();} public static void execWindowCmd() throws IOException {ProcessBuilder pb = new ProcessBuilder();// 命令Map<String, String> env = pb.environment();// 獨立環境變量System.out.println(env);// 打印環境變量env.put("MY_NAME", "KING");// 添加環境變量key-valuepb.redirectErrorStream(true);// 重定向錯誤輸出流到正常輸出流try {pb.directory(new File("d://test1"));// 設置目錄test1pb.command("cmd", "/c", "dir");// 執行命令 Process process1;process1 = pb.start();// 啟動進程 BufferedReader br1;br1 = new BufferedReader(new InputStreamReader(process1.getInputStream(), "gbk"));String line1 = null;while ((line1 = br1.readLine()) != null) {System.out.println(line1);}pb.directory(new File("d://test2"));// 設置目錄test2pb.command("cmd", "/c", "dir", ">>", "test1.log");// 執行命令,把結果輸出到test1.logProcess process2 = pb.start();// 啟動進程BufferedReader br2 = new BufferedReader(new InputStreamReader(process2.getInputStream(), "gbk"));String line2 = null;while ((line2 = br2.readLine()) != null) {//因為結果輸出到了文件,所以本處無信息返回 System.out.println(line2);}} catch (IOException e) {e.printStackTrace();throw e;}} }
?
?
Java Runtime.exec()的使用
深入研究java.lang.ProcessBuilder類
?