ProcessBuilder工具类及执行多条命令

该代码示例展示了如何在Java中使用ProcessBuilder类来执行Linux命令,包括处理命令输出和等待命令执行完成。通过将命令列表转换为数组,可以执行多条命令,如压缩、文件编码转换等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java代码调用Linux命令执行。

public class ProcessUtil {

    private static final Logger logger = LoggerFactory.getLogger(ProcessUtil.class);

    private static final Integer WAIT_TIME = 20;

    /**
     * 执行脚本命令
     * @param commands
     * @throws
     */
    public static Integer exec(List<String> commands, StringBuffer outPutResult) throws Exception{

        String[] arrCommands = list2Array(commands);
        ProcessBuilder processBuilder =  new ProcessBuilder(arrCommands);
        processBuilder.redirectErrorStream(true);
        Process process = null;
        try {
            process = processBuilder.start();
            final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8));

            new Thread(() -> {
                try {
                    String str;
                    while ((str = br.readLine()) != null) {
                        if(outPutResult != null){
                            outPutResult.append(str);
                        }else{
                            logger.info(str);
                        }
                    }
                }catch (Exception e) {
                    logger.error("获取子进程输出错误:", e);
                }
            });

            process.waitFor(WAIT_TIME, TimeUnit.SECONDS);
            return process.exitValue();
        } finally {
            if(process != null){
                process.destroy();
            }
        }
    }

    /**
     * List转String
     * @param commands
     * @return
     */
    private static String[] list2Array(List<String> commands){
        String[] commends = new String[commands.size()];
        commands.toArray(commends);
        return commends;
    }
}

执行多条命令:

 * List<String> commend = new ArrayList<>();
 * commend.add("/bin/sh");
 * commend.add("-c");
 * //   /bin/bash -c '7zzs x /usr/data/tmp/测试.zip -o/usr/data/tmp/one/ && convmv -f GBK -t utf8 --notest -r /usr/data/tmp/one/'
 * commend.add("第1条命令 && 第2条命令 && 第3条命令 ..."); //这里可以实现执行多条linux命令
 * Process process = ProcessBuilder.exec(commend);
 * String message = ProcessBuilder.getOutput(process);
 * String error = ProcessBuilder.getError(process);
 * ProcessBuilder.destroy(process);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值