例子:
boolean execResult = true;
BufferedReader br = null;
try
{
//linux腳本test.sh需要另個入參(可以有0或多個參數)
String account = "test"
String pwd = "12345";
String shellPath = "...腳本的實際路徑"
ProcessBuilder b = new ProcessBuilder("sh", "test.sh", account,
password);
b = b.directory(new File(shellPath));
Process rt = b.start();
String line = "";
//腳本返回的信息流
br = new BufferedReader(new InputStreamReader(rt.getInputStream()));
while (null != (line = br.readLine()))
{
//對結果做處理
}
rt.destroy();
}
catch (Exception e)
{
execResult = false;
}
finally
{
if (null != br)
{
IOUtils.closeQuietly(br);
}
}
java5引入了ProcessBuilder類,該類的功能於Runtime.exec系列方法相同,都是啟動一個進程。
主要區別是:ProcessBuilder是可以更好控制啟動的進程,且可以重用;但是exec方法沒有這種效果;
ProcessBuilder是從1.5加進來的,而exec系列方法是從1.0開始就有的,后續版本不斷的重載這個方法,到了1.5已經有6個之多。
但是,官方的api沒有任何文檔說明這個兩個區別,我想主要的是OO的思想,導致了這個新類的產生,功能上沒什么變化
具體內容可以參見java5的api文檔或者java in a nutshell
使用ProcessBuilder的例子
package net.java2000.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
public class TestProcessBuilder {
public static void main(String args[]) throws Exception {
ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir");
builder.directory(new File("e:/"));
Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "GBK");
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:", Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
總結:
ProcessBuilder為進程提供了更多的控制,例如,可以設置當前工作目錄,還可以改變環境參數。而Process的功能相對來說簡單的多。
ProcessBuilder是一個final類,有兩個帶參數的構造方法,你可以通過構造方法來直接創建ProcessBuilder的對象。而 Process是一個抽象類,一般都通過Runtime.exec()和ProcessBuilder.start()來間接創建其實例
http://www.cnblogs.com/taven/archive/2011/12/17/2291460.html