300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息

java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息

时间:2018-12-25 22:10:44

相关推荐

java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息

[java]代码库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() {

Process p = null;

try {

// 执行ipconfig /all命令

p = new ProcessBuilder("ipconfig", "/all").start();

} catch (IOException e) {

return "";

}

byte[] b = new byte[1024];

int readbytes = -1;

StringBuffer sb = new StringBuffer();

// 读取进程输出值

InputStream in = p.getInputStream();

try {

while ((readbytes = in.read(b)) != -1) {

sb.append(new String(b, 0, readbytes));

}

} catch (IOException e1) {

} finally {

try {

in.close();

} catch (IOException e2) {

}

}

return sb.toString();

}

/**

* 执行自定义的一个命令,该命令放在C:/temp下,并且需要2个环境变量的支持。

*/

public static boolean executeMyCommand() {

// 创建系统进程创建器

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");

// 获得进程的环境

Map env = pb.environment();

// 设置和去除环境变量

env.put("VAR1", "myValue");

env.remove("VAR0");

env.put("VAR2", env.get("VAR1") + ";");

// 切换工作目录

pb.directory(new File("C:/temp"));

try {

// 得到进程实例

Process p = pb.start();

// 等待该进程执行完毕

if (p.waitFor() != 0) {

// 如果进程运行结果不为0,表示进程是错误退出的

// 获得进程实例的错误输出

InputStream error = p.getErrorStream();

// do something

}

// 获得进程实例的标准输出

InputStream sdin = p.getInputStream();

} catch (IOException e) {

} catch (InterruptedException e) {

}

return true;

}

public static void main(String[] args) {

String address = UsingProcessBuilder.getPhysicalAddress();

System.out.println(address);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。