iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Java进程ProcessBuilder类的介绍及使用,ProcessBuilder调用外部程序执行shell命令Linux命令
  • 189
分享到

Java进程ProcessBuilder类的介绍及使用,ProcessBuilder调用外部程序执行shell命令Linux命令

java开发语言 2023-09-12 17:09:29 189人浏览 安东尼
摘要

目录 ProcessBuilder类的介绍及使用 【前言】 【正文】 --构造方法-- --常用方法-- --使用技巧-- --调用本地Shell命令,实例-- 【总结】 【注意】 ProcessBuilder类的介绍及使用 【前言】

目录

ProcessBuilder类的介绍及使用

【前言】

【正文】

--构造方法--

--常用方法--

--使用技巧--

--调用本地Shell命令,实例--

【总结】

【注意】


ProcessBuilder类的介绍及使用

【前言】

        在做一个项目的时候需要用到运行时动态执行JAVA命令,一开始的思路是运行时生成bat脚本,然后通过Runtime类的exec方法之行bat脚本,但是此方法不好的地方在于脚本执行时会弹出一个cmd程序界面框。后面在参考YANG的源码时发现了另一种运行时执行JAVA命令的方法,由此延申,了解了PorcessBuilder类的作用及用法。

        ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。

【正文】

ProcessBuilder类是java.lang包下的基础类,在使用时无需导入,可以直接使用。它主要用于创建和运行各类外部程序,例如javac,java等等。

--构造方法--

它(List command),它(String... command)

--常用方法--

void command(String... command) 用于将待执行命令及参数传递给它;

Process start() 执行命令并返回一个Process对象,用于获取对执行程序的输入和输出;

void directory(File base) 用于设置待执行命令的工作目录,可以不设置;

// ProcessBuilder api//构造方法 //利用指定的操作系统程序和参数构造一个进程生成器。 ProcessBuilder(List command) //利用指定的操作系统程序和参数构造一个进程生成器。ProcessBuilder(String… command) //方法 //返回此进程生成器的操作系统程序和参数。 command() //设置此进程生成器的操作系统程序和参数。 command(List command) //设置此进程生成器的操作系统程序和参数。 command(String… command) //返回此进程生成器的工作目录。 directory() //设置此进程生成器的工作目录。directory(File directory) //返回此进程生成器环境的字符串映射视图。 environment方法获得运行进程的环境变量,得到一个Map,可以修改环境变量 environment() //返回进程生成器是否合并标准错误和标准输出;true为合并,false为不合并redirectErrorStream() //设置此进程生成器的 redirectErrorStream 属性。默认值为false不合并redirectErrorStream(boolean redirectErrorStream) //使用此进程生成器的属性启动一个新进程。start() 

--使用技巧--

在使用它的时候建议将其封装一下,这样更便于使用,例如,

public class ProcessUtil {    public static void process(String... command) throws Exception {        process((File)null, command);    }    public static void process(List commandList) throws Exception {        process((File)null, (String[])commandList.toArray(new String[0]));    }    public static void process(File base, String... command) throws Exception {        ProcessBuilder processBuilder = new ProcessBuilder(new String[0]);        if (base != null) {            processBuilder.directory(base);        }        processBuilder.command(command);        Process process = processBuilder.start();......

添加一个input2string()方法,用于将执行程序获得的输出转换为String对象,便于输出,例如,

public static String input2str(InputStream inputStream) throws UnsupportedEncodingException {        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        try {            int len;            while((len = inputStream.read(buffer)) != -1) {                outSteam.write(buffer, 0, len);            }            outSteam.close();            inputStream.close();        } catch (IOException var5) {            var5.printStackTrace();        }        return outSteam.toString("utf-8");    }

调用本地FFmpeg命令,实例:

  

总结

它作为一个JAVA底层类,使开发者能够与操作系统进行强大的互动,而且在使用它进行系统命令的调用时,能够在后台进行,不会有使用Runtime类时弹出cmd命令执行框的困扰,十分方便。在后面的学习当中可以进一步了解一下System类的用法。

【注意】

在用Runtime.getRuntime().exec()或ProcessBuilder(array).start()创建子进程Process之后,一定要及时取走子进程的输出信息和错误信息,否则输出信息流和错误信息流很可能因为信息太多导致被填满,最终导致子进程阻塞住,然后执行不下去。

典型用法应该为:

参考:Java进程Runtime、Process、ProcessBuilder调用外部程序_程序猿架构的博客-CSDN博客


如果本篇文章对你有帮助的话,很高兴能够帮助上你。

当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。

来源地址:https://blog.csdn.net/chenthe1/article/details/131241341

--结束END--

本文标题: Java进程ProcessBuilder类的介绍及使用,ProcessBuilder调用外部程序执行shell命令Linux命令

本文链接: https://www.lsjlt.com/news/404819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作