从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文件所在的目录。

如果有人知道这个问题,请解决该错误。

+1

您可以直接调用该程序。不需要添加'cmd.exe' – CSK

+0

这可能只是另一种做同样事情的方法,但这里的问题是,为什么AB不被当作一个目录!......并且,它不应该是这样的。相反,代码应该进入目录并执行exe文件。 – gautam

我知道,例如,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();