在我的项目中,我需要使用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()中有限制。如果命令的长度超过限制,它将被切断。
任何人都可以告诉我这个问题的原因,如果我需要传递一个长命令字符串,我怎样才能解决它?
非常感谢任何帮助。