Process和ProcessBuilder入门【原】

ProcessBuilder优点

ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要优点在使用过程中感受有:

  • 前者是jdk1.5后的新方式
  • 配置环境变量时更优雅
  • 对当前目录的控制也更合理
  • 错误流重定向特别方便 
  • 进程控制更简洁

ProcessTool.java

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;

/**
 * 
 * @author King
 * @see
 * @version createTM:2017年11月23日 下午3:41:38
 */
public class ProcessTool {

    public static void main(String[] args) throws IOException {
        execWindowCmd();
    }

    public static void execWindowCmd() throws IOException {

        ProcessBuilder pb = new ProcessBuilder();// 命令
        Map<String, String> env = pb.environment();// 独立环境变量
        System.out.println(env);// 打印环境变量
        env.put("MY_NAME", "KING");// 添加环境变量key-value
        pb.redirectErrorStream(true);// 重定向错误输出流到正常输出流

        try {
            pb.directory(new File("d://test1"));// 设置目录test1
            pb.command("cmd", "/c", "dir");// 执行命令
            Process process1;
            process1 = pb.start();// 启动进程
            BufferedReader br1;
            br1 = new BufferedReader(new InputStreamReader(process1.getInputStream(), "gbk"));
            String line1 = null;
            while ((line1 = br1.readLine()) != null) {
                System.out.println(line1);
            }

            pb.directory(new File("d://test2"));// 设置目录test2
            pb.command("cmd", "/c", "dir", ">>", "test1.log");// 执行命令,把结果输出到test1.log
            Process process2 = pb.start();// 启动进程
            BufferedReader br2 = new BufferedReader(new InputStreamReader(process2.getInputStream(), "gbk"));
            String line2 = null;
            while ((line2 = br2.readLine()) != null) {//因为结果输出到了文件,所以本处无信息返回
                System.out.println(line2);
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        }
    }
}

Java Runtime.exec()的使用

深入研究java.lang.ProcessBuilder类

原文地址:https://www.cnblogs.com/whatlonelytear/p/7885270.html