Runtime.exec()

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);
    }
}
相關文章
相關標籤/搜索