【JAVA】ProcessBuilder类的介绍及使用

本文深入探讨Java中ProcessBuilder类的使用技巧,包括构造方法、常用方法及如何封装以简化命令执行过程。通过实例展示了如何避免Runtime.exec方法弹出CMD窗口的问题,适合Java开发者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【JAVA技巧】ProcessBuilder类的介绍及使用

【前言】

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

【正文】

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

--构造方法--

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

--常用方法--

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

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

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

--使用技巧--

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

public class ProcessUtil {

public static void process(String... command) throws Exception {

        process((File)null, command);

    }

 

    public static void process(List<String> 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();

......

  1. 添加一个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");

    }

【总结】

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

 

【声明】

本文原创,文中代码及思路借鉴于yangtools源码,详情请参考yangtools源码及JAVA1.8API官方文档(https://docs.oracle.com/javase/8/docs/api/)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值