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類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM