Runtime.exec()

Posted 迷失之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    }
}

 

以上是关于Runtime.exec()的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Runtime.Exec 传递远程命令 (ssh)

使用 Java 的 Runtime.exec() 时如何添加超时值?

Runtime.exec()

如何通过在 java 中使用 Runtime.exec() 运行 sqlplus 来捕获 sqlplus 窗口的输出

使用 Process.runtime.exec 记录到 syslog

Runtime.exec() sucks!!!!