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();
}
}
執行有輸出内容的指令
/**
* 有傳回值的測試.
*/
@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();
}
}