Java 中的 ProcessBuilder

2024 年 9 月 10 日 | 阅读 7 分钟

ProcessBuilder类用于在Java中创建操作系统进程。ProcessBuilder类的每个实例都管理着一个进程属性的集合。ProcessBuilder类不能被同步。在JDK 5.0之前,使用Runtime.exec()方法来创建和执行进程。请注意,ProcessBuilder类继承自Object类。

ProcessBuilder类的构造函数

ProcessBuilder(List command): 使用指定的参数和操作系统程序构造进程生成器。

ProcessBuilder(String… command): 使用指定的参数和操作系统程序构造进程生成器。

ProcessBuilder类的主要方法

1. List command(): 该方法返回进程生成器的参数和操作系统程序。

语法: public List command().

返回值: 参数和进程生成器的程序。

异常: 当参数为null时抛出NullPointerException。

文件名: ProcessBuilderDemo.java

输出

command: [notepad++.exe]

2. ProcessBuilder directory(File directory): 该方法设置进程生成器的当前工作目录。start()方法调用的子进程将使用此目录作为工作目录。

语法: public ProcessBuilder directory(File directory).

返回值: 进程生成器。

异常: NA。

文件名: ProcessBuilderDemo1.java

输出

directory: src

3. Map environment(): 此方法返回进程生成器环境的字符串映射视图。当创建进程生成器时,环境将用当前进程环境的副本进行初始化。

语法: public Map environment()

返回值: 进程生成器的环境。

异常: SecurityException - 如果存在安全管理器,并且其checkPermission()方法未授予访问进程环境的权限。

文件名: ProcessBuilderDemo2.java

输出

Key = USERDOMAIN_ROAMINGPROFILE, Value = DESKTOP-2CFH9HQ
Key = LOCALAPPDATA, Value = C:\Users\Nikhil\AppData\Local
Key = PROCESSOR_LEVEL, Value = 6
Key = USERDOMAIN, Value = DESKTOP-2CFH9HQ
Key = FPS_BROWSER_APP_PROFILE_STRING, Value = Internet Explorer
Key = LOGONSERVER, Value = \\DESKTOP-2CFH9HQ
Key = PROMPT, Value = $P$G
Key = SESSIONNAME, Value = Console
Key = ALLUSERSPROFILE, Value = C:\ProgramData
Key = =K:, Value = K:\
Key = PROCESSOR_ARCHITECTURE, Value = AMD64
Key = PSModulePath, Value = C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
Key = SystemDrive, Value = C:
Key = =ExitCode, Value = 00000000
Key = OneDrive, Value = C:\Users\Nikhil\OneDrive
Key = APPDATA, Value = C:\Users\Nikhil\AppData\Roaming
Key = USERNAME, Value = Nikhil
Key = ProgramFiles(x86), Value = C:\Program Files (x86)
Key = CommonProgramFiles, Value = C:\Program Files\Common Files
Key = Path, Value = C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Java\jdk-11.0.13\bin
Key = FPS_BROWSER_USER_PROFILE_STRING, Value = Default
Key = PATHEXT, Value = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
Key = OS, Value = Windows_NT
Key = COMPUTERNAME, Value = DESKTOP-2CFH9HQ
Key = PROCESSOR_REVISION, Value = 8e09
Key = CommonProgramW6432, Value = C:\Program Files\Common Files
Key = ComSpec, Value = C:\Windows\system32\cmd.exe
Key = ProgramData, Value = C:\ProgramData
Key = ProgramW6432, Value = C:\Program Files
Key = HOMEPATH, Value = \Users\Nikhil
Key = SystemRoot, Value = C:\Windows
Key = TEMP, Value = C:\Users\Nikhil\AppData\Local\Temp
Key = HOMEDRIVE, Value = C:
Key = PROCESSOR_IDENTIFIER, Value = Intel64 Family 6 Model 142 Stepping 9, GenuineIntel
Key = USERPROFILE, Value = C:\Users\Nikhil
Key = TMP, Value = C:\Users\Nikhil\AppData\Local\Temp
Key = CommonProgramFiles(x86), Value = C:\Program Files (x86)\Common Files
Key = ProgramFiles, Value = C:\Program Files
Key = PUBLIC, Value = C:\Users\Public
Key = NUMBER_OF_PROCESSORS, Value = 4
Key = windir, Value = C:\Windows
Key = =::, Value = ::\

注意:以上输出是动态的。这是因为输出会根据用户使用的系统而有所不同。

4. boolean redirectErrorStream(): 该方法返回一个布尔值,表示进程生成器是否合并了标准输出和标准错误。如果redirectErrorStream()方法返回true,那么由start()方法启动的后续子进程产生的任何错误输出都将与标准输出合并,以便两者都可以通过Process.getInputStream()方法读取。此方法可以简化错误消息与相应输出的关联。请注意,redirectErrorStream属性的初始值为false。

语法: public boolean redirectErrorStream()

返回值: 布尔值。

异常: NA。

文件名: ProcessBuilderDemo3.java

输出

false

5. ProcessBuilder redirectErrorStream(boolean redirectErrorStream): 该方法设置进程生成器的redirectErrorStream属性。如果redirectErrorStream属性为true,那么由start()方法启动的后续子进程产生的任何错误输出都将与标准输出合并。初始值为false。

语法: public boolean redirectErrorStream(boolean redirectErrorStream)

返回值: 布尔值。

异常: NA。

文件名: ProcessBuilderDemo4.java

输出

true

6. Process start(): 该方法利用进程生成器的属性启动一个新进程。新进程将在directory()提供的当前工作目录中,使用environment()提供的进程环境,执行command()提供的参数和命令。该方法会检查命令是否与操作系统兼容。

语法: public Process start().

返回值: 一个新的Process对象,用于管理子进程。

Exception

  • NullPointerException - 如果命令列表中的任何元素为null。
  • IndexOutOfBoundsException - 如果命令是一个空列表(大小为0)。
  • SecurityException - 如果存在安全管理器,并且其checkExec方法不允许创建子进程。IOException - 如果发生I/O错误。

文件名: ProcessBuilderDemo5.java

输出

Volume in drive C has no label.
Volume Serial Number is E44F-AA1A

 Directory of C:\Users\Nikhil\Downloads\March Month Content

04/02/2022  12:53 PM    <DIR>          .
04/02/2022  12:53 PM    <DIR>          ..
03/07/2022  02:16 AM            72,341 Arithmetic Exception in Java.docx
04/01/2022  07:50 PM            75,092 Balanced Prime in Java.docx
03/04/2022  12:06 AM            72,984 Comparetoignorecase Java.docx
03/07/2022  02:16 AM            67,015 Difference between ArrayList and LinkedList.docx
03/18/2022  10:29 PM            88,850 Display the nodes at odd levels of a tree.docx
04/01/2022  06:49 PM            68,855 Empty Statement in Java.docx
03/07/2022  02:13 AM            75,014 Iccanobif Numbers in Java.docx
03/22/2022  05:43 PM            82,319 Java HashSet.docx
03/29/2022  06:43 PM            77,242 Java LinkedHashSet class.docx
03/26/2022  05:06 AM            87,274 Maximum Rectangular Area in a Histogram.docx
04/01/2022  06:59 PM            75,088 Minimum Coins for Making a Given Value in Java.docx
03/07/2022  02:27 AM            77,622 Minimum Xor Value Pair in Java.docx
03/18/2022  10:24 PM            70,371 Nude Numbers in Java.docx
03/03/2022  01:21 AM            69,562 Trimorphic Numbers in Java.docx
03/28/2022  06:23 PM            86,764 Two Sorted LinkedList Intersection in Java.docx
              15 File(s)      1,146,393 bytes
               2 Dir(s)  13,788,762,112 bytes free

6. ProcessBuilder inheritIO(): 为子进程的标准I/O设置与当前Java进程相同的目的地和源。

语法: public ProcessBuilder inheritIO().

返回值: 进程生成器。

异常: NA。

文件名: myBat.bat

文件名: ProcessBuilderDemo6.java

输出

"Welcome To JavaTpoint. A great site to Learn Java.