1. 简介
ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。
2. 示例
下面是一个使用修改过工作目录和环境启动进程的例子,并重定向标准输出和标准错误到自定义日志文件。
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
//设置环境变量,初始值是当前进程环境的一个副本System.getenv()
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
//设置工作目录
pb.directory(new File("myDir"));
File log = new File("log");
//redirectErrorStream 属性默认值为false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。
//如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
//启动进程
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
//重定向标准输出到日志
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;
3. ProcessBuilder API
//构造方法
//利用指定的操作系统程序和参数构造一个进程生成器。
ProcessBuilder(List<String> command)
//利用指定的操作系统程序和参数构造一个进程生成器。
ProcessBuilder(String… command)
//方法
//返回此进程生成器的操作系统程序和参数。
command()
//设置此进程生成器的操作系统程序和参数。
command(List<String> command)
//设置此进程生成器的操作系统程序和参数。
command(String… command)
//返回此进程生成器的工作目录。
directory()
//设置此进程生成器的工作目录。
directory(File directory)
//返回此进程生成器环境的字符串映射视图。 environment方法获得运行进程的环境变量,得到一个Map,可以修改环境变量
environment()
//返回进程生成器是否合并标准错误和标准输出;true为合并,false为不合并
redirectErrorStream()
//设置此进程生成器的 redirectErrorStream 属性。默认值为false不合并
redirectErrorStream(boolean redirectErrorStream)
//使用此进程生成器的属性启动一个新进程。
start()
---------------------
作者:zhoujing_0424
来源:CSDN
原文:https://blog.csdn.net/zhoujing_0424/article/details/79917368
版权声明:本文为博主原创文章,转载请附上博文链接!