从java执行.exe文件
问题描述:
我想从我的java代码运行一个.exe文件,并将几个参数/选项传递给.exe文件。从java执行.exe文件
所以基本上,我做了以下内容:
BufferedReader br = null;
OutputResult out = new OutputResult();
String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin";
Process p = Runtime.getRuntime().exec(commandStr);
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
out.add(line.trim());
}
注:此处A-B是其中xyz.exe所在的目录的名称。
但是当变量out被打印时,它实际上表明它什么也没有。
因此,而不是上面的代码我它修改为以下:
BufferedReader bre = null;
OutputResult oute = new OutputResult();
String commandStr= "cmd.exe /C A-B/xyz.exe health -U admin -P admin";
Process p = Runtime.getRuntime().exec(commandStr);
bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
while ((line = bre.readLine()) != null) {
oute.add(line.trim());
}
现在,这里被印刷在可变欧特时,它显示该消息,
“AB”没有被识别为一个内部或外部命令,可操作程序或批处理文件。
所以我的问题是,为什么A-B不被视为实际的.exe文件所在的目录。
如果有人知道这个问题,请解决该错误。
答
我知道,例如,Raspbian上的Java无法访问带有空格的目录(例如/ New Folder)。我猜想它有关Raspbian在创建目录时如何考虑''char的问题。可能地,Windows可能与' - '字符有相同的问题。你可以重命名目录没有任何这样的字符,然后再试一次吗?
(我使用Mac,所以我无法重新创建问题。另一种选择可能是,如果这实际上不是问题的话,创建一个shell脚本从中执行exe,而不是我只是建议这个,因为我之前没有任何问题使用这个方法。)
答
你应该使用目标xyz.exe的完整路径 - 当你像这样执行cmd.exe时,它不是相对于Java程序的文件夹而言,它相对于C:\Windows\System32
,因此它看不到您的AB文件夹。
因此,举例来说: cmd.exe /C C:/A-B/xyz.exe health -U admin -P admin
而作为@CSK正确地注意到,您可以直接执行您的.exe,不CMD.EXE。例如:
Process process = new ProcessBuilder("C:/A-B/xyz.exe", "health", "-U", "admin", "-P", "-admin").start();
您可以直接调用该程序。不需要添加'cmd.exe' – CSK
这可能只是另一种做同样事情的方法,但这里的问题是,为什么AB不被当作一个目录!......并且,它不应该是这样的。相反,代码应该进入目录并执行exe文件。 – gautam