2016-08-19 194 views
0

我想從我的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

回答

0

我知道,例如,Raspbian上的Java無法訪問帶有空格的目錄(例如/ New Folder)。我猜想它有關Raspbian在創建目錄時如何考慮''char的問題。可能地,Windows可能與' - '字符有相同的問題。你可以重命名目錄沒有任何這樣的字符,然後再試一次嗎?

(我使用Mac,所以我無法重新創建問題。另一種選擇可能是,如果這實際上不是問題的話,創建一個shell腳本從中執行exe,而不是我只是建議這個,因爲我之前沒有任何問題使用這個方法。)

1

你應該使用目標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();