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();
}
}