传递一个非常长的参数时,Java Runtime.exec(String命令,String [] envp,File dir)无法正常工作

时间:2014-01-09 09:19:53

标签: java string runtime.exec

在我的项目中,我需要使用Runtime.getRuntime.exec(String命令,String [] envp,File dir)执行命令字符串。但是如果我传递一个很长的命令字符串,这个函数就无法正常工作。

我正在使用如下的java代码:

import java.io.File;
import java.io.IOException;
public class test {
    public static void main(String[] args) throws IOException {
        String cygwinVar = 
                "C:\\cygwin"
                + "\\bin\\bash.exe -c \"export PATH=/usr/bin:${PATH}; "
                 + "/bin/";
        StringBuilder sb = new StringBuilder(cygwinVar + "touch");
        for(int i = 0; i < 1000; i++) {
            Integer n = 10000 + i;
            sb.append(" " + n);
        }
        System.out.println(sb.length());
        Runtime.getRuntime().exec(sb.toString(), null, new File("C:\\test\\"));
    }
}

在这个程序中,我在C:\ test中创建了许多空文件。

如果我创建1000个空文件,它就可以了。正确创建了所有1000个空文件.sb的长度为6067。

如果我创建2000个空文件,我只能在C:\ test中获得1358个空文件。并且10000到11356之间的文件名是正确的,而最后一个文件的名称不是“11357”而是“113”.sb的长度是12067。

如果我创建的文件超过2000个,结果是相同的。

如果我使用相似的代码在CentOs 64位中创建2000或3000个文件,结果是正确的。

我使用的是Windows 7 64位,而我的cygwin是32位。 似乎命令字符串的长度在Windows 7或cygwin中的函数Runtime.exec()中有限制。如果命令的长度超过限制,它将被切断。

任何人都可以告诉我这个问题的原因,如果我需要传递一个长命令字符串,我怎样才能解决它?

非常感谢任何帮助。

0 个答案:

没有答案