Java ProcessBuilder调用外部程序

2014-06-22· 10214 次浏览
## 简介 ProcessBuilder类用于创建操作系统进程。能够设置目录、环境变量以及读取物理网卡的地址等。 每个ProcessBuilder实例管理一个进程属性集。start()方法利用这些属性创建一个新的Process实例。Start()方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。 每个进程生成管理命令、环境、工作目录、redirectErrorStream等属性。 ## 读取目录 ```java ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir"); // 设置工作目录 builder.directory(new File("d:")); // 启动进程 Process process = builder.start(); // 创建读取缓冲对象,编码方式为GBK BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK")); String line; while ((line = br.readLine()) != null) { System.out.println(line); } ``` ## 读取与设置环境变量 ```java ProcessBuilder pb = new ProcessBuilder("cmd.exe"); // 获取系统参数并打印显示 Map<String, String> env = pb.environment(); // 设置环境变量 env.put("key1", "value2"); env.put("key2", "value2"); // 移除环境变量 env.remove("key2"); // 显示系统变量 for (Entry<String, String> entry : env.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue()); } // 启动进程 pb.start(); ``` ## 读取IP地址 ```java ProcessBuilder pb = new ProcessBuilder("ipconfig", "/all"); Process process = pb.start(); String line; BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK")); while ((line = reader.readLine()) != null) { if (line.indexOf("IPv4") != -1) System.out.println(line); } reader.close(); ``` ## 打开Notepad++ ```java ProcessBuilder p = new ProcessBuilder("C:/Program Files/Notepad++/Notepad++.exe"); p.start(); ```