Java ProcessBuilder 示例

17 Mar 2025 | 6 分钟阅读

Java.lang.ProcessBuilder 类是用于创建操作系统(OS)进程的最重要的类之一。每个 ProcessBuilder 实例都管理着一组进程属性。ProcessBuilder 类提供了 start() 方法,用于使用这些进程属性创建新进程的实例。

我们可以通过使用同一个 ProcessBuilder 类实例来重复调用 start() 方法,以创建具有相同或相关属性的新子进程。

ProcessBuilder 类提供了以下两个构造函数:

ProcessBuilder(List command)

该构造函数创建一个具有给定 OS 程序和参数的进程构建器实例。

ProcessBuilder(String… command)

该构造函数创建一个具有给定 OS 程序和参数的进程构建器实例。

ProcessBuilder 类提供了以下方法,如下所示:

List<String> command()

command() 方法用于获取进程构建器的操作系统程序和参数。

语法

返回值

它返回当前进程构建器的程序及其参数。

异常

当参数为 null 时,它可能抛出 NullPointerException

让我们通过一个例子来理解如何在 Java 中使用 ProcessBuilder 的 command() 方法。

ProcessBuilderExample1.java

输出

Java ProcessBuilder Example

ProcessBuilder command(List<String> command)

command() 方法用于设置当前进程构建器的操作系统程序和参数。

语法

参数

它接受一个字符串列表,其中包含程序及其参数。

返回值

不适用。

异常

当参数为 null 时,它可能抛出 NullPointerException

让我们通过一个例子来理解如何在 Java 中使用进程构建器的 command() 方法。

ProcessBuilderExample2.java

输出

Java ProcessBuilder Example

ProcessBuilder directory (File directory)

directory() 方法是 ProcessBuilder 的另一个重要方法,用于设置当前进程构建器的目录。

用户提供的目录将用作对象 start() 方法随后启动的子进程的工作目录。

语法

参数

它接受新的工作目录。

返回值

它返回当前的进程构建器。

让我们通过一个例子来理解如何在 Java 中使用 ProcessBuilder 的 directory() 方法。

ProcessBuilderExample3.java

输出

Java ProcessBuilder Example

Map environment()

它返回一个 String 映射,定义了进程构建器环境的视图。当创建进程构建器时,环境被初始化为当前进程环境的副本。environment() 方法返回的映射用作对象 start() 方法随后启动的子进程的工作目录。

语法

返回值

它返回当前进程构建器的环境。

Exception

当存在安全管理器并且其 checkPermission 方法不允许访问进程时,它可能抛出 SecurityException

让我们通过一个例子来理解如何在 Java 中使用 ProcessBuilder 的 environment() 方法。

ProcessBuilderExample4.java

输出

Java ProcessBuilder Example

ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

redirectErrorStream() 方法用于设置当前进程构建器的 redirectErrorStream 属性。如果此属性为 true,则此对象 start() 方法随后启动的子进程生成的任何错误输出都将与标准输出合并,以便可以使用 process.getInputStream() 方法读取两者。这使得错误消息与相应输出的相关性更容易。初始值为 false。

语法

返回值

它返回当前的进程构建器。

Exception

不适用。

ProcessBuilderExample5.java

输出

Java ProcessBuilder Example

Process start()

ProcessBuilder 的 start() 方法用于使用进程构建器的属性启动一个新进程。新进程将调用 command() 给出的命令和参数,在 directory() 给出的工作目录中,使用 environment() 给出的环境。

语法

返回值

一个用于管理子进程的新 Process 对象。

Exception

start() 方法可能会抛出以下异常之一:

  1. 当命令列表中的元素为 null 时,它可能抛出 NullPointerException
  2. 当命令是空列表时,它可能抛出 IndexOutOfBoundsException
  3. 当存在安全管理器且其 checkExec 方法不允许创建子进程时,它可能抛出 SecurityException
  4. 当发生 I/O 错误时,它可能抛出 IOException

ProcessBuilderExample6.java

输出

Java ProcessBuilder Example

ProcessBuilder inheritIO()

inheritIO() 方法用于将子进程的标准 I/O 源和目标设置为与当前 java 进程相同。

语法

返回值

当前进程构建器

Exception

不适用。

ProcessBuilderExample7.java

输出

Java ProcessBuilder Example