import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
/**
* 通过ProcessBuilder执行本地命令。此类用于创建操作系统进程。 获取本机的ip配置信息
*
* 每个进程生成器管理这些进程属性: (1)命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有) (2)环境 是从变量 到值
* 的依赖于系统的映射。初始值是当前进程环境的一个副本. (3)工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名.
* (4)redirectErrorStream 属性。最初,此属性为 false, 意思是子进程的标准输出和错误输出被发送给两个独立的流, 这些流可以通过
* Process.getInputStream() 和 Process.getErrorStream() 方法来访问。 如果将值设置为
* true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。 在此情况下,合并的数据可从
* Process.getInputStream() 返回的流读取, 而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
*/
public class UsingProcessBuilder {
/**
* 获取Windows系统下的网卡的MAC地址
*
* @return
*/
public static String getPhysicalAddress
() {
try {
// 执行ipconfig /all命令
p = new ProcessBuilder("ipconfig", "/all").start();
return "";
}
byte[] b = new byte[1024];
int readbytes = -1;
// 读取进程输出值
try {
while ((readbytes = in.read(b)) != -1) {
sb.
append(new String(b,
0, readbytes
));
}
} finally {
try {
in.close();
}
}
return sb.toString();
}
/**
* 执行自定义的一个命令,该命令放在C:/temp下,并且需要2个环境变量的支持。
*/
public static boolean executeMyCommand() {
// 创建系统进程创建器
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
// 获得进程的环境
Map
<String, String
> env
= pb.
environment();
// 设置和去除环境变量
env.put("VAR1", "myValue");
env.remove("VAR0");
env.put("VAR2", env.get("VAR1") + ";");
// 切换工作目录
pb.
directory(new File("C:/temp"));
try {
// 得到进程实例
// 等待该进程执行完毕
if (p.waitFor() != 0) {
// 如果进程运行结果不为0,表示进程是错误退出的
// 获得进程实例的错误输出
// do something
}
// 获得进程实例的标准输出
}
return true;
}
public static void main
(String[] args
) {
String address
= UsingProcessBuilder.
getPhysicalAddress();
}
}