Java ProcessBuilder调用外部程序
## 简介
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();
```