关于ProcessBuilder的一些应用

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

概述:

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

简单应用:

ProcessBuilder的应用简单来说就是,先生成一个ProcessBuilder对象:

ProcessBuilder提供了两个构造函数,ProcessBuilder(List<String> 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这两个临时文件删除。

你可能感兴趣的:(ProcessBuilder,redirectInput,redirectOutput)