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-value pb.redirectErrorStream(true);// 重定向錯誤輸出流到正常輸出流 try { pb.directory(new File("d://test1"));// 設置目錄test1 pb.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"));// 設置目錄test2 pb.command("cmd", "/c", "dir", ">>", "test1.log");// 執行命令,把結果輸出到test1.log Process 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; } } }
