ProcessBuilder 用法详解

原文: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() 




 

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用相对路径需要注意以下几点: 1. 相对路径是相对于当前工作目录而言的,而不是相对于Java程序的目录。 2. 当前工作目录是指在命令行或终端中执行Java程序时所处的目录。 3. 如果需要使用相对路径,需要先确定当前工作目录,然后使用相对路径。 下面是使用ProcessBuilder执行相对路径的详细方法: 1. 创建ProcessBuilder对象,并设置要执行的命令: ``` ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir"); ``` 2. 获取当前工作目录并设置为ProcessBuilder对象的工作目录: ``` String currentDir = System.getProperty("user.dir"); pb.directory(new File(currentDir)); ``` 3. 启动进程并等待它完成: ``` Process p = pb.start(); p.waitFor(); ``` 完整的示例代码如下: ``` public class ProcessBuilderDemo { public static void main(String[] args) throws Exception { // 创建ProcessBuilder对象 ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir"); // 获取当前工作目录并设置为ProcessBuilder对象的工作目录 String currentDir = System.getProperty("user.dir"); pb.directory(new File(currentDir)); // 启动进程并等待它完成 Process p = pb.start(); p.waitFor(); // 输出进程的输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } } ``` 在这个示例代码中,我们使用相对路径执行了一个dir命令,并输出了它的结果。在实际应用中,可以根据需要修改命令和相对路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值