当前位置: 首页 > 编程笔记 >

Java如何基于ProcessBuilder类调用外部程序

卫皓
2023-03-14
本文向大家介绍Java如何基于ProcessBuilder类调用外部程序,包括了Java如何基于ProcessBuilder类调用外部程序的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了Java如何基于ProcessBuilder类调用外部程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. demo1

@Test
  public void testProcessBuilder() {
    ProcessBuilder processBuilder = new ProcessBuilder();
//    processBuilder.command("ping","127.0.0.1");
    processBuilder.command("ipconfig");
    //将标准输入流和错误输入流合并,通过标准输入流读取信息
    processBuilder.redirectErrorStream(true);
    try {
      //启动进程
      Process start = processBuilder.start();
      //获取输入流
      InputStream inputStream = start.getInputStream();
      //转成字符输入流
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
      int len = -1;
      char[] c = new char[1024];
      StringBuffer outputString = new StringBuffer();
      //读取进程输入流中的内容
      while ((len = inputStreamReader.read(c)) != -1) {
        String s = new String(c, 0, len);
        outputString.append(s);
        System.out.print(s);
      }
      inputStream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

2. demo02

 @Test
  public void testFFmpeg() {
    ProcessBuilder processBuilder = new ProcessBuilder();
    //定义命令内容
    List<String> command = new ArrayList<>();
    command.add("D:/program/ffmpeg-20191229-e20c6d9-win64-static/bin/ffmpeg.exe");
    command.add("-i");
    command.add("D:/test/video/1.avi");
    command.add("-y");//覆盖输出文件
    command.add("-c:v");
    command.add("libx264");
    command.add("-s");
    command.add("1280x720");
    command.add("-pix_fmt");
    command.add("yuv420p");
    command.add("-b:a");
    command.add("63k");
    command.add("-b:v");
    command.add("753k");
    command.add("-r");
    command.add("18");
    command.add("D:/test/video/1.mp4");
    processBuilder.command(command);
    //将标准输入流和错误输入流合并,通过标准输入流读取信息
    processBuilder.redirectErrorStream(true);
    try {
      //启动进程
      Process start = processBuilder.start();
      //获取输入流
      InputStream inputStream = start.getInputStream();
      //转成字符输入流
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
      int len = -1;
      char[] c = new char[1024];
      StringBuffer outputString = new StringBuffer();
      //读取进程输入流中的内容
      while ((len = inputStreamReader.read(c)) != -1) {
        String s = new String(c, 0, len);
        outputString.append(s);
        System.out.print(s);
      }
      inputStream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

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

 类似资料:
  • 问题内容: 我有一个具有称为的私有方法的类。我想从外面打电话。我认为应该可以反思,但是我得到了。有任何想法吗??? 问题答案: 利用使用其之前的Method对象的方法。

  • 本文向大家介绍Java基于Runtime调用外部程序出现阻塞的解决方法,包括了Java基于Runtime调用外部程序出现阻塞的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于Runtime调用外部程序出现阻塞的解决方法, 是一个很实用的技巧。分享给大家供大家参考。具体分析如下: 有时候在java代码中会调用一些外部程序,比如SwfTools来转换swf、ffmpeg来转

  • 问题内容: 我正在开发Java应用程序,以通过通过ProcessBuilder执行CMD命令使USB驱动器可启动。这需要几秒钟,因为我想显示一个jprogressbar来增加GUI,我已经尝试过这样做,但是我没有得到,请帮助我。 这是我的代码: 我如何在代码中使用JProgressbar以及必须在哪里使用? 谢谢 问题答案: Swing是一个单线程环境,它也不是线程安全的。 这意味着任何长时间运行

  • 问题内容: 我有一个程序和一个脚本,希望将其合并到我的Web应用程序中。 我想使用它们来解析上传到我的网站的文件;处理过程可能需要几秒钟,因此我也避免阻止该应用程序。 我如何才能只接受文件,然后仅在控制器的子过程中运行程序和脚本? 问题答案: 参见child_process。这是一个使用的示例,它允许您在输出数据时写入stdin并从stderr / stdout中读取。如果您不需要写stdin并且

  • 本文向大家介绍C#使用Process类调用外部exe程序,包括了C#使用Process类调用外部exe程序的使用技巧和注意事项,需要的朋友参考一下 在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法。在C#中,通过Process类来进行进程操作。 Process类在System.Diagnostics包中。 示例一 通过上述代码可以调用记事本程序,注意如果不是调用系统

  • 我正在制作一个Java类,在这个类中,我可以用DTO对列表应用一个过滤器(searchterms)。筛选器如下所示: 在我的类中,我有以下方法,将所有筛选器应用到列表: 但是根据字段的类型有不同的实现。与字符串类似,我创建了一个正则表达式: 但就像一个Float我想要另一个比较,我不想应用正则表达式到一个Float。要确保根据字段的类型调用正确的方法,最好的方法是什么?