我期待通过命令行来执行外部程序,但我发现我只能这样做,如果我从调用它的目录中存在的程序。 我希望能够从任何目录执行程序。
我设置为Windows Path变量(7)和我能够用下面的命令行手动任意目录执行程序; 但是我无法通过Java这样做。
相关的代码:
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP});
我的问题是,上述程序的输出产生一个一般文件名为“log.txt的”。 穿我的程序时,这会导致问题。 如果不能使用的路径变量,或者我可以将程序复制到新目录中,然后删除它。 我想避免这样做。
编辑:上面的代码工作作为GetLog.exe驻留在C:\ AutomateKPI。 我想引用%PATH%,所以我可以从运行C GetLog.exe:\ AutomateKPI \ *。* NEWDIR
尝试使用ProcessBuilder
。 它允许你指定的工作目录:
String commandPath = "C:" + File.pathSeparator +
AutomateKPI" + File.pathSeparator + "GetLog.exe";
ProcessBuilder pb = new ProcessBuilder(commandPath, "-e", rossIP);
pb.directory(new File("intendedWorkingDirectory"));
Process p = pb.start();
或者,如果C:\ AutomateKPI是您%PATH%
ProcessBuilder pb = new ProcessBuilder("GetLog.exe", "-e", rossIP);
这是从文档还不清楚,但ProcessBuilder
似乎定位的方式,就是类似系统,例如使用的东西%PATH%
在Windows上。
好了,只要你知道你打开程序的路径,你不必使用CMD,这应该工作,每次:
File file = new File("File Directory");
Desktop dt = Desktop.getDesktop();
try {
dt.open(file);
} catch (IOException e1) {
}