用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

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

2012-11-16 作者: 程序猿style举报

[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<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 {
			// 得到进程实例
			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);

	}
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...