1. Runtime.getRuntime().exec()能作什麼? 1)調用外部程序 // 調用的是javac.exe小程序 Runtime.getRuntime().exec("javac"); 2)調用外部程序的某個指令 // 調用的是cmd.exe中的dir指令 Runtime.getRuntime().exec("cmd /c dir"); 3)調用外部的批處理文件(.bat) // 調用的是目錄【D:\\test】下的【test.bat】腳本 runtime.exec("cmd /c test.bat", null, new File("D:\\test")); 2. "cmd /c dir"中的/c是啥意思? cmd /c 執行結束後,關閉cmd進程. cmd /k 執行結束後,不關閉cmd後臺進程. 3. Runtime提供了幾個exec()方法,裏面的參數都是啥意思? public Process exec(String command); public Process exec(String command, String[] envp); public Process exec(String command, String[] envp, File dir); public Process exec(String cmdarray[]); public Process exec(String[] cmdarray, String[] envp); public Process exec(String[] cmdarray, String[] envp, File dir); a. command 一個命令。可包含命令和參數。 b. envp 一組環境變量的設置。 格式:name=value 或 null. c. dir 子進程的工做目錄。 e. cmdarray 包含多個命令的數組。其中每一個命令可包含命令和參數。 4. 一個比較完整的使用示例,見下面代碼。
import java.io.BufferedReader; import java.io.InputStreamReader; import org.junit.Test; public class Demo { @Test public void testName() throws Exception { // 調用命令 Runtime runtime = Runtime.getRuntime(); Process process = null; process = runtime.exec("javac"); // 用法1:調用一個外部程序 // process = runtime.exec("cmd /c dir"); // 用法2:調用一個指令(可包含參數) // process = runtime.exec("cmd /c test.bat", null, new File("D:\\test")); // 用法3:調用一個.bat文件 // 存放要輸出的行數據 String line = null; // 輸出返回的報錯信息 System.out.println("=================ErrorStream==================="); BufferedReader inErr = new BufferedReader(new InputStreamReader(process.getErrorStream())); while ((line = inErr.readLine()) != null) { System.out.println(line); } // 輸出正常的返回信息 System.out.println("=================InputStream==================="); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); while ((line = in.readLine()) != null) { System.out.println(line); } // 獲取退出碼 int exitVal = process.waitFor(); // 等待進程運行結束 System.out.println("exitVal = " + exitVal); } }