Runtime.getRuntime().exec方法

Runtime.getRuntime().exec()方法主要用於執行外部的程序或命令java

Runtime.getRuntime().exec共有六個重載方法:數組

public Process exec(String command)

在單獨的進程中執行指定的字符串命令。spa

public Process exec(String [] cmdArray)

在單獨的進程中執行指定命令和變量線程

public Process exec(String command, String [] envp)

在指定環境的獨立進程中執行指定命令和變量code

public Process exec(String [] cmdArray, String [] envp)

在指定環境的獨立進程中執行指定的命令和變量對象

public Process exec(String command,String[] envp,File dir)

在有指定環境和工做目錄的獨立進程中執行指定的字符串命令blog

public Process exec(String[] cmdarray,String[] envp,File dir)

在指定環境和工做目錄的獨立進程中執行指定的命令和變量繼承

咱們先來比較exec(String command)與exec(String[] cmdArray)的區別,其實他們是等價的,最終都會調用:進程

exec(String[] cmdarray,String[] envp,File dir),咱們看看方法exec(String cmdarray,String[] envp,File dir) throws IOException的實現代碼:字符串

public Process exec(String command, String[] envp, File dir) throws IOException {
    if (command.length() == 0) throw new IllegalArgumentException("Empty command");
    StringTokenizer st = new StringTokenizer(command);
    String[] cmdarray = new String[st.countTokens()];
    for (int i = 0; st.hasMoreTokens(); i++)
        cmdarray[i] = st.nextToken();
    return exec(cmdarray, envp, dir);
}

從上面的代碼,咱們能夠看出最終調用的代碼都是:exec(String[] cmdArray,String envp,File  dir)。exec(String command)至關於exec(command,null,null),exec(String[] cmdArray)至關於exec(cmdArray,null,null)。

參數說明

cmdarray - 包含所調用命令及其參數的數組。

envp - 字符串數組,其中每一個元素的環境變量的設置格式爲 name=value,若是子進程應該繼承當前進程的環境,或該參數爲 null。

dir - 子進程的工做目錄;若是子進程應該繼承當前進程的工做目錄,則該參數爲 null。

另外,執行exec(String command)不等同於直接執行command line命令,好比命令:

javap -l xxx > output.txt

這時要用exec(String[] cmdArray)。如例:

Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",
    "javap -l xxx > output.txt"});

關於返回結果類型:Process,它有幾個方法:

1.destroy():殺掉子進程

2.exitValue():返回子進程的出口值,值 0 表示正常終止

3.getErrorStream():獲取子進程的錯誤流

4.getInputStream():獲取子進程的輸入流

5.getOutputStream():獲取子進程的輸出流

6.waitFor():致使當前線程等待,若有必要,一直要等到由該 Process 對象表示的進程已經終止。若是已終止該子進程,此方法當即返回。若是沒有終止該子進程,調用的線程將被阻塞,直到退出子進程,根據慣例,0 表示正常終止

相關文章
相關標籤/搜索