推荐阅读:
执行函数
Process exec(String command)
在单独的进程中执行指定的字符串命令
Process exec(String[] cmdarray)
在单独的进程中执行指定命令和变量
Process exec(String[] cmdarray, String[] envp)
在指定环境的独立进程中执行指定命令和变量
Process exec(String[] cmdarray, String[] envp, File dir)
在指定环境和工作目录的独立进程中执行指定的命令和变量
Process exec(String command, String[] envp)
在指定环境的单独进程中执行指定的字符串命令
Process exec(String command, String[] envp, File dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令
abstract int waitFor()
导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止
abstract InputStream getInputStream()
获取子进程的输入流,最好对输入流进行缓冲
参数说明:
cmdarray
: 包含所调用命令及其参数的数组。command
: 一条指定的系统命令envp
: 字符串数组,其中每个元素的环境变量的设置格式为name=value;如果子进程应该继承当前进程的环境,则该参数为 nulldir
: 子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为 null
特别注意
Java 执行 shell 命令的奇怪执行:
步骤:
- 将 shell 命令通过
String[] cmd = {"sh","-c",command}
处理,执行cmd
参数 - 也可以使用 base64 编码处理特殊字符问题
String command = "xxx"; //shell 命令
String[] cmd = {"sh","-c",cmd}; //很重要
Runtime.getRuntime().exec(cmd); //执行
例子
public class ReadCmdLine {
public static void main(String args[]) {
Process process = null;
List<String> processList = new ArrayList<String>();
try {
String command = "ls -a";
String[] cmd = {"sh","-c",command};
process = Runtime.getRuntime().exec(cmd);
BufferedReader input
= new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = input.readLine()) != null) {
processList.add(line);
}
input.close();
} catch (IOException e) {
e.printStackTrace();
}
for (String line : processList) {
System.out.println(line);
}
}
}