天天看點

如何使用ProcessBuilder執行外部指令行執行普通指令執行有輸出内容的指令 

public final class java.lang.ProcessBuilder extends Object :此類用于建立作業系統程序。

用來執行外部指令,比如與cmd中或者終端上一樣執行shell指令。

大體分成三步:

1、建構ProcessBuilder

2、建構外部指令

3、執行start

執行普通指令

/**
   * 簡單測試
   *
   * @throws IOException
   * @throws InterruptedException
   */
  @Test
  public void test1() throws IOException, InterruptedException {
    // 建構一個指令
    List<String> command = new ArrayList<>();
    // 該指令的位置,可以用 which touch 查找
    command.add("/usr/bin/touch");
    command.add("aaa.txt");

    // 建構一個 processBuilder
    ProcessBuilder processBuilder = new ProcessBuilder();
    // 切換工作目錄,也可以不寫這個,直接在command 裡面 加上
    processBuilder.directory(new File("/Users/ch/Downloads/test"));
    // command.add("/Users/ch/Downloads/test")

    // 添加指令
    processBuilder.command(command);
    // 執行
    Process start = processBuilder.start();
    if (start.isAlive()) {
      start.waitFor();
    }
  }
           
如何使用ProcessBuilder執行外部指令行執行普通指令執行有輸出内容的指令 

執行有輸出内容的指令 

/**
   * 有傳回值的測試.
   */
  @Test
  public void test2() throws IOException, InterruptedException {
    // 建構一個指令
    List<String> command = new ArrayList<>();
    // 該指令的位置,可以用 which 查找
    command.add("/bin/ls");

    ProcessBuilder processBuilder = new ProcessBuilder();
    processBuilder.directory(new File("/Users/ch/Downloads/test"));

    // 設定為 true 後,錯誤會和标準輸出一樣輸出
    processBuilder.redirectErrorStream(true);
    processBuilder.command(command);
    Process process = processBuilder.start();

    InputStream inputStream = process.getInputStream();

    // 使用 hutool 工具類 解析 inputStream
    FastByteArrayOutputStream read = IoUtil.read(inputStream);
    System.out.println(read);

    inputStream.close();
    if(process.isAlive()){
      process.waitFor();
    }

  }
           
如何使用ProcessBuilder執行外部指令行執行普通指令執行有輸出内容的指令