添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory("myDir");
 Process p = pb.start();
要利用一组明确的环境变量启动进程,在添加环境变量之前,首先调用 Map.clear()。
二、API预览
构造方法摘要
ProcessBuilder(List<String> command)       利用指定的操作系统程序和参数构造一个进程生成器。
ProcessBuilder(String... command)       利用指定的操作系统程序和参数构造一个进程生成器。
command()  返回此进程生成器的操作系统程序和参数。
command(List<String> command)  设置此进程生成器的操作系统程序和参数。
command(String... command)
设置此进程生成器的操作系统程序和参数。
directory() 返回此进程生成器的工作目录。
directory(File directory)       设置此进程生成器的工作目录。
返回此进程生成器环境的字符串映射视图。
redirectErrorStream() 通知进程生成器是否合并标准错误和标准输出。
redirectErrorStream(boolean redirectErrorStream)  设置此进程生成器的 redirectErrorStream 属性。
start() 使用此进程生成器的属性启动一个新进程。
三、常见应用
若要使用ProcessBuilder创建一个进程,只需要创建ProcessBuilder的一个实例,指定该进程的名称和所需参数。要执行此程序,调用该实例上的start()即可。下面上一个执行Windows记事本的例子。注意它将要编辑的文件名指定为一个参数。
class PBDemo { 
public static void main(String args[]) { 
try { 
                        ProcessBuilder proc = new ProcessBuilder("notepad.exe", "testfile"); 
                        proc.start(); 
                } catch (Exception e) { 
                        System.out.println("Error executing notepad."); 

其他demo 

/** 获取Windows系统下的网卡的MAC地址 */
    public static List<String> getPhysicalAddress() {
        Process p = null;
        List<String> address = new ArrayList<String>(); // 物理网卡列表
        try {
            p = new ProcessBuilder("ipconfig", "/all").start(); // 执行ipconfig/all命令
        } catch (IOException e) {
            e.printStackTrace();
            return address;
        byte[] b = new byte[1024];
        int readbytes = -1;
        StringBuffer sb = new StringBuffer();
        // 读取进程输出值
        // 在JAVA IO中,输入输出是针对JVM而言,读写是针对外部数据源而言
        InputStream in = p.getInputStream();
        try {
            while ((readbytes = in.read(b)) != -1) {
                sb.append(new String(b, 0, readbytes, "gbk"));
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e2) {
                e2.printStackTrace();
        // 以下是分析输出值,得到物理网卡
        String rtValue = sb.toString();
        int i = rtValue.indexOf("Physical Address. . . . . . . . . :");
        while (i > 0) {
            rtValue = rtValue.substring(i
                    + "Physical Address. . . . . . . . . :".length());
            address.add(rtValue.substring(1, 18));
            i = rtValue.indexOf("Physical Address. . . . . . . . . :");
        return address;

demo2

public static void p1() {
        try {
            List<String> cmd = new LinkedList<String>();
            cmd.add("java");
            cmd.add("-version");
            ProcessBuilder pb = new ProcessBuilder(cmd);
            pb.redirectErrorStream(true);
            Process p = pb.start();
            // 取得命令结果的输出流
            InputStream fis = p.getInputStream();
            // 用一个读输出流类去读
            InputStreamReader isr = new InputStreamReader(fis);
            // 用缓冲器读行
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            // 直到读完为止
            while ((line = br.readLine()) != null) {
                System.out.println(line);
        } catch (Exception e) {
            System.out.print(e.toString());