2013-07-17 144 views
0

我正在嘗試使用exec函數。對可執行文件的路徑包含空格,這是給我悲痛 我的代碼看起來像這樣將路徑傳遞給exec

Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation.exe\"", null, new File("\"C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation\"")); 

當這樣執行,我得到一個例外 -

Cannot run program ""c:\Program" 

我將不勝感激,如果有人可以給我一些幫助解決這個

在此先感謝

+0

改爲使用它:http://docs.oracle.com/javase/1.5.0/docs/api/java/ lang/ProcessBuilder.html – Maroun

+0

您正在嘗試使用'Runtime.exec()'函數。請明確點。 – EJP

回答

4

Runtime.exec(String command, String[] envp, File dir)

使用指定的環境和工作目錄在單獨的進程中執行指定的字符串命令。

這是一種方便的方法。調用形式爲exec(command, envp, dir)的行爲與調用exec(cmdarray, envp, dir)的行爲完全相同,其中cmdarraycommand中所有令牌的陣列。

更精確地,command串被分成使用由呼叫new StringTokenizer(command)與字符類別無需進一步修改創建StringTokenizer令牌。然後將令牌生成器生成的令牌以相同的順序放入新字符串數組cmdarray中。

這意味着無論外引號如何,第一個字符串都會被分成標記。使用Runtime.exec(String[] cmdarray, String[] envp, File dir)版本可以避免可執行文件的標記。

或者,使用ProcessBuilder

File d = new File("C:/Program Files (x86)/ASL/_ASL Software Suite_installation"); 
ProcessBuilder pb = new ProcessBuilder(d.getAbsolutePath() + "/main.exe"); 
Process p = pb.directory(d) 
       .start(); 

參見:

+0

感謝提示 - 我如何安排這樣的事情,讓程序不會繼續,直到被調用的程序退出? – user1414413

-1

你並不需要再次引用的文件名。 Java會照顧它,因爲你只需給出正確的文件名就像這樣

Runtime.getRuntime().exec(
    "C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation.exe", 
    null, 
    new File("C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation")); 
+0

這也不起作用。我嘗試過: 'Runtime.getRuntime().exec(「/ Applications/Utilities/Disk Utility.app/Contents/MacOS/Disk Utility」,null,new File(「/ Applications/Utilities/Disk Utility.app/Contents/」蘋果系統/」)); '它不會工作。 – Chris