1、查了一下网上通用的方法,
public static boolean runtimeExec(String cmd, File path) {
Process proc;
try {
Runtime rt = Runtime.getRuntime();
proc = rt.exec(cmd, null, path);
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
int exitVal = proc.waitFor();
return exitVal == 0;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
不过试了一下,这个还是会提示文件找不到。放弃。
2、
public static boolean runtimeExec(String cmd, String path) {
Process proc;
try {
StringBuilder builder=new StringBuilder();
builder.append("cmd /c ");
builder.append(path);
builder.append(File.separator);
builder.append(cmd);
Runtime rt = Runtime.getRuntime();
proc = rt.exec(builder.toString());
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
int exitVal = proc.waitFor();
return exitVal == 0;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
Sucess!!
更新下说明下:
先说一个场景:aaa.bat 在a文件夹里面,要在b文件夹中执行
方式一指的是要执行的path目录。比如aaa.bat 在a文件夹,要在b文件夹中执行。则如果在a文件夹下运行则不会报错。如果切到其它目录就会有问题。当然,如果配置了全局变量path则就不会存在这样的问题。
方式二输入的path指的是命令所在的问题,其实就等于先找到了a文件下的aaa.bat命令,然后使用方式一就可以切换到b文件夹中执行。方法二其实就是提供了定位找到aaa.bat的功能。