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
表示正常终止