用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...