java 调用 shell 命令

推荐阅读:

执行函数

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;如果子进程应该继承当前进程的环境,则该参数为 null
  • dir: 子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为 null

特别注意

Java 执行 shell 命令的奇怪执行:

步骤:

  1. 将 shell 命令通过 String[] cmd = {"sh","-c",command} 处理,执行 cmd 参数
  2. 也可以使用 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);
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章