ProcessBuilder工具类及执行多条命令

15 篇文章 0 订阅
13 篇文章 1 订阅

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);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值