Java 在Windows和Linux下执行命令的工具

import java.io.*;

/**
 * 命令行执行工具
 * info 命名执行后的输出(包含错误信息)
 */
public class ProcessUtil {
    private StringBuffer info;

    private String[] commands;

    ProcessBuilder pbuilder;

    public ProcessUtil() {
        commands = new String[3];
        if (System.getProperty("os.name").toUpperCase().contains("WIN")) {
            commands[0] = "cmd";
            commands[1] = "/c";
        } else {
            commands[0] = "/bin/sh";
            commands[1] = "-c";
        }
    }

    public StringBuffer getInfo() {
        return info;
    }

    public String getOutputMessage() {
        return info.toString();
    }

    public int execute(String command) throws IOException, InterruptedException {
        return execute(command, null, null);
    }

    //重载execute
    public int execute(String command, String env, File dir) throws IOException, InterruptedException {
        this.commands[2] = command;
        this.info = new StringBuffer();
        pbuilder = new ProcessBuilder(this.commands);
        pbuilder.directory(dir);
        pbuilder.redirectErrorStream(true);
        if (env != null && !env.trim().isEmpty()) {
            pbuilder.environment().put("Path", String.format("%s;%s", pbuilder.environment().get("Path"), env));
        }
        Process process = pbuilder.start();
        String line;
        InputStreamReader inputStreamReader;
        int resultCode = 0;
        try (InputStream inputStream = process.getInputStream()){
            inputStreamReader = new InputStreamReader(inputStream, "GBK");
            BufferedReader rd = new BufferedReader(inputStreamReader);
            while ((line = rd.readLine()) != null) {
                //特殊处理, 只记录2000 个字符 错误信息太长可导致内存溢出
                if (info.length() < 2000) {
                    this.info.append(line).append("\n");
                }
            }
            resultCode = process.waitFor();
            process.destroy();
        }catch (Exception e){
            e.printStackTrace();
        }
        return resultCode;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值