ProcessBuilder类的测试

package t0;

public class TestOpenWeb {
public static void main(String args[]) {
try {
ProcessBuilder proc = new ProcessBuilder(
"C:\\Program Files\\Internet Explorer\\iexplore.exe",
"http://www.baidu.com/");
proc.start();

ProcessBuilder proc1 = new ProcessBuilder("E:\\BCompare.exe");
proc1.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}

========================================================

【原】https://blog.csdn.net/zhoujing_0424/article/details/79917368

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()

========================================================

【原】https://www.cnblogs.com/whatlonelytear/p/7885270.html

ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要优点在使用过程中感受有:

  • 前者是jdk1.5后的新方式
  • 配置环境变量时更优雅
  • 对当前目录的控制也更合理
  • 错误流重定向特别方便 
  • 进程控制更简洁

猜你喜欢

转载自www.cnblogs.com/dengw125792/p/12617559.html