Runtime.getRuntime.exec(String)与exec(String[])的区别

南楼画角 提交于 2019-12-10 14:01:25

Runtime.getRuntime.exec(String)

这个方法传入的是字符串,JAVA内部处理时会对字符串进行分割成数据,然后调用exec(String[],null,null)方法

public Process exec(String command) throws IOException {
	return exec(command, null, null);
    }

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);

 public Process exec(String[] cmdarray, String[] envp, File dir)
	throws IOException {
	return new ProcessBuilder(cmdarray)
	    .environment(envp)
	    .directory(dir)
	    .start();
    }



Runtime.getRuntime.exec(String[])

该方法会最后也是执行exec(String[],null,null)

public Process exec(String cmdarray[]) throws IOException {
	return exec(cmdarray, null, null);
    }

    public Process exec(String[] cmdarray, String[] envp, File dir)
	throws IOException {
	return new ProcessBuilder(cmdarray)
	    .environment(envp)
	    .directory(dir)
	    .start();
    }


从上面可以看出,如果执行一整条已经拼接好的命令时,可以用exec(String);如果命令参数分开时,可以用exec(String[]);如果把一条已经拼接好的字符串执行第二个方法,就会报命令找不到。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!