关于ProcessBuilder的一些应用

为什么80%的码农都做不了架构师?>>>关于ProcessBuilder的一些应用
文章图片

最近由于工作的需要,涉及到对ProcessBuilder的一些简单应用,下面简单介绍一下我的用法。
概述:

ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。
简单应用:
【关于ProcessBuilder的一些应用】ProcessBuilder的应用简单来说就是,先生成一个ProcessBuilder对象:

ProcessBuilder提供了两个构造函数,ProcessBuilder(List> command) 和 ProcessBuilder(String... command
我这里使用的是第二个,因为是需要在Linux系统上执行shell脚本,所以,我的构造函数为:
ProcessBuilder pb = new ProcessBuilder("sh"); (ps:你也可以对应的使用“Python”或者在windows上使用“cmd”)

执行的命令的应用程序已经选好了,那我们的输入和输出呢,怎么设置,这是我们关心的地方。
推荐使用redirectInput(File file) ,让我们用这个方法来获取输入,同理使用redirectOutput(File file)
来处理输出,如果有错误的话,还需要使用redirectError(File file)

由于涉及到的参数都是File类型的,所以,你需要先生成这几个文件,然后再使用它们,说了这么多,可能感觉还是有些模糊不清,下面请见代码:

import java.io.File; import java.io.IOException; import java.io.PrintWriter; public class ProcessBuilderSample { public static void main(String[] args) throws IOException { String file = "!/bin/sh\n" + "a=\'Hello world\'\n" + "echo $a\n"; String result = Process("sh", file); System.out.println(result); } public static String Process(String command, String file) { File input = new File("./file.sh"); if (!input.exists()) { try { input.createNewFile(); PrintWriter print = new PrintWriter(input); print.append(file); print.flush(); } catch (IOException e) { e.printStackTrace(); } }String result = "SUCCESS"; try { File output = new File("./outfile"); ProcessBuilder pb = new ProcessBuilder(command); pb.redirectInput(input); pb.redirectOutput(output); pb.start(); } catch (IOException e) { result = "FAIL"; e.printStackTrace(); }return result; } }

执行完后,可以去outfile里面查看执行结果,你也可以把结果读出后返回,将file.sh和outfile这两个临时文件删除。
转载于:https://my.oschina.net/reyhe/blog/215400

    推荐阅读