Java调用cmd命令

一、正常使用       

        使用 java 调用 cmd 命令时,使用如下的代码(不需要导入其他库) ,存在异常需要抛出或捕获,下面方法可以直接使用。

    // 接收命令在本地cmd执行
    public Map<Integer, String> exec(String command) {
        StringBuilder sb = new StringBuilder();
        Integer value = -1;
        // key为命令执行结果,value为命令执行响应内容
        Map<Integer, String> map = new HashMap<>();
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec(command);

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                line.trim();
                sb.append(line);
            }

            process.waitFor();
            // 只有命令执行成功才会返回0
            value = process.exitValue();
            map.put(value, sb.toString());
            return map;
        } catch (IOException | InterruptedException e) {
            log.error("执行命令失败[" + e.getMessage() + "]");
        }
        return map;
    }

        方法解释:

  • StringBuilder对象是为了拿到返回值,并拼接为一个字符串。
  • value参数只是一个标记,因为执行完CMD命令之后,可以由process.exitValue()拿到一个数字类型的返回值,该返回值只有在CMD命令执行成功并成功退出的时候返回0。因此,可以根据这个返回值知道命令是否运行成功。
  • Map对象中只有一个数据,key为命令是否执行成功,value为执行命令的返回值。
  • .exec(command)是开始执行CMD命令,并得到Process对象返回值,可以由该对象得到一个输入流,该流就是执行命令的返回值。
  • .waitFor()方法目的是为了保证CMD命令执行完毕。

二、特殊使用

        上面的正常使用可以运行exe文件,但是若运行 gpedit.msc devmgmt.msc 等工具无反应。解决办法是,设定cmd的运行模式,也是直接在exec方法中执行即可(这不是java的语法,是CMD的程序参数):

CMD程序参数:CMD程序参数-CSDN博客

        例如:60秒倒计时关机命令

.exec("cmd tsshutdn");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值