Java执行cmd命令两种实现方法解析

 更新时间:2020年07月28日 11:58:54   作者:张志勇-  
这篇文章主要介绍了Java执行cmd命令两种实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一般java在执行CMD命令时,通常是使用Runtime.getRuntime.exec(command)来执行的,这个方法有两种细节要注意:

1.一般执行方法,代码如下,这种方法有时执行exe时会卡在那里。

//一般的执行方法,有时执行exe会卡在那  stmt要执行的命令
  public static void executive(String stmt) throws IOException, InterruptedException {
    Runtime runtime = Runtime.getRuntime(); //获取Runtime实例
    //执行命令
    try {
      String[] command = {"cmd", "/c", stmt};
      Process process = runtime.exec(command);
      // 标准输入流(必须写在 waitFor 之前)
      String inStr = consumeInputStream(process.getInputStream());
      // 标准错误流(必须写在 waitFor 之前)
      String errStr = consumeInputStream(process.getErrorStream());
      new ProcessClearStream(process.getInputStream(), "INFO").start();
      new ProcessClearStream(process.getErrorStream(), "ERROR").start();
      int proc = process.waitFor();
      InputStream errorStream = process.getErrorStream(); //若有错误信息则输出
      if (proc == 0) {
        System.out.println("执行成功");
      } else {
        System.out.println("执行失败" + errStr);
      }
    } catch (IOException | InterruptedException e) {
      e.printStackTrace();
    }
  }

  /**
   * 消费inputstream,并返回
   */
  public static String consumeInputStream(InputStream is) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(is,"GBK"));
    String s;
    StringBuilder sb = new StringBuilder();
    while ((s = br.readLine()) != null) {
      System.out.println(s);
      sb.append(s);
    }
    return sb.toString();
  }

2.第二种方法是先生成一个缓存文件,用来缓存执行过程中输出的信息,这样在执行命令的时候不会卡。代码如下:

//这个方法比第一个好,执行时不会卡 stmt要执行的命令
  public static void aaa(String stam){
    BufferedReader br = null;
    try {
      File file = new File("D:\\daemonTmp");
      File tmpFile = new File("D:\\daemonTmp\\temp.tmp");//新建一个用来存储结果的缓存文件
      if (!file.exists()){
        file.mkdirs();
      }
      if(!tmpFile.exists()) {
        tmpFile.createNewFile();
      }
      ProcessBuilder pb = new ProcessBuilder().command("cmd.exe", "/c", stam).inheritIO();
      pb.redirectErrorStream(true);//这里是把控制台中的红字变成了黑字,用通常的方法其实获取不到,控制台的结果是pb.start()方法内部输出的。
      pb.redirectOutput(tmpFile);//把执行结果输出。
      pb.start().waitFor();//等待语句执行完成,否则可能会读不到结果。
      InputStream in = new FileInputStream(tmpFile);
      br= new BufferedReader(new InputStreamReader(in));
      String line = null;
      while((line = br.readLine()) != null) {
        System.out.println(line);
      }
      br.close();
      br = null;
      tmpFile.delete();//卸磨杀驴。
      System.out.println("执行完成");
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if(br != null) {
        try {
          br.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 负载均衡的 5 种算法实现原理

    Java 负载均衡的 5 种算法实现原理

    这篇文章主要介绍Java 负载均衡的 5 种算法实现原理,负载均衡能够平均分配客户请求到服 务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。下面就来看看文章的具体内容吧
    2021-10-10
  • Java实现可配置换肤的方法示例

    Java实现可配置换肤的方法示例

    本文主要介绍了Java实现可配置换肤的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法

    IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法

    在学习SpringMVC课程中,基于IDEA新建maven项目模块后,webapp目录未被标识,即没有小蓝点的图标显示,所以本文给大家介绍了IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法,需要的朋友可以参考下
    2024-03-03
  • Centos6.5下Jdk+Tomcat+Mysql环境安装图文教程

    Centos6.5下Jdk+Tomcat+Mysql环境安装图文教程

    这篇文章主要为大家详细介绍了Centos6.5系统下Jdk+Tomcat+Mysql环境安装过程,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • SpringBoot整合JdbcTemplate的示例代码

    SpringBoot整合JdbcTemplate的示例代码

    JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错,这篇文章主要介绍了SpringBoot整合JdbcTemplate,需要的朋友可以参考下
    2022-08-08
  • 解析探秘fescar分布式事务实现原理

    解析探秘fescar分布式事务实现原理

    这篇文章主要为大家解析探秘fescar分布式事务的实现原理,fescar的txc模型实现非常有研究的价值,所以今天我们来好好翻一翻fescar项目的代码
    2022-02-02
  • Java中将接口返回的字节串转为文件详解

    Java中将接口返回的字节串转为文件详解

    这篇文章主要给大家介绍了关于Java中将接口返回的字节串转为文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11
  • 盘点几种常见的java排序算法

    盘点几种常见的java排序算法

    所谓排序就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,下面这篇文章主要给大家介绍了几种常见的java排序算法的相关资料,需要的朋友可以参考下
    2021-11-11
  • hashCode方法的使用讲解

    hashCode方法的使用讲解

    有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,我来解释一下吧。
    2013-03-03
  • kill命令在Java应用中使用的注意事项小结

    kill命令在Java应用中使用的注意事项小结

    这篇文章主要给大家介绍了关于kill命令在Java应用中使用的注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06

最新评论