您的位置:首页 > 其它

我与windows server 2008的第一次亲密接触

2007-12-18 23:14 363 查看
最近由于工作需要,使用java在调用cmd程序时,为了避免在路径当中有多个空格(例如:c:\\aa a\t t\m m),所以使用了
Runtime time = Runtime.getRuntime();
try{
time.exec(new String[]{"Sp.exe"}, null, new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}

遇到了java.io.IOException: CreateProcess error=2, ?????????异常,找了很多原因都没有弄明白,然而使用
time.exec(new String[]{"java","-jar","Sp.jar"}, null, new File(args[1]));就可以!
如果使用:(前提是不能有不规则的空格出现)
Runtime time = Runtime.getRuntime();
try{
String command = "args[1]"+File.separator+Sp.exe;

time.exec(command);
}catch(Exception e){
e.printStackTrace();
}
也可以,同样在底层都是使用的ProcessBuilder去创建的进程,只是传递的参数不一样,结果就不一样。
我的理解是,在java中去执行exe文件,使用第一种方式,目录中windows在执行程序Sp.exe时,与主程序的工作目录不一样,就是说user.dir不一样,因为进程的工作目录不同,所以在创建进程时报错。
虽然你能在java程序中遍历到你需要的文件。
为了避免出现多个空格的情况,继续实验,最终找到了解决的方案:
Runtime time = Runtime.getRuntime();
try{
time.exec(new String[]{"cmd","/c","Sp.exe"}, null, new File(args[1]));
}catch(Exception e){
e.printStackTrace();
}
cmd /c中具体含义,你在dos中输入 cmd /?就可以查看

本文出自 “java” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: