2014-12-02 13 views
1

我試圖在同一目錄作爲我的Jar文件通過獲取文件的位置與的Runtime.exec()失敗,並在目錄(JAVA)的空間

private static File jarLocation = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile(); 

然後調用

執行過程
Runtime.getRuntime().exec("command", null, jarLocation); 

這通常工作得很好,但當路徑中有一個空格時,我會得到「目錄名稱無效」。我試圖添加一些調試代碼,該代碼打印用「%20」替換空格的目錄的路徑(我假設因爲空格的ASCII十六進制爲20)。有沒有辦法可以使用路徑中有空格的目錄?

+0

將%20替換回實際空格應該可行。它們是網址編碼的結果。編輯:請參閱http://stackoverflow.com/a/12733172/995891 – zapl 2014-12-02 03:39:47

+0

你能否包括你得到的全部錯誤,包括堆棧跟蹤?你在使用什麼操作系統?而實際的'command'字符串?它以這種形式的Runtime.exec()進行標記,因此可能存在問題。 – 2014-12-02 03:40:15

+0

@AndrewJanke我正在運行的命令似乎沒有任何區別。我已經在Windows 7和Linux(Ubuntu)上嘗試了這一點,它也似乎沒有任何區別。我只是傳遞一個字符串的命令。 – user2248702 2014-12-02 03:48:38

回答

1

getPath()調用,即URL.getPath(),不返回文件系統路徑。它返回一個URL的路徑部分。對於file: URL,它將是URL編碼的本地文件系統路徑。如果該原始URL實際上是file: URL,則需要使用URI和URL類或自定義字符串處理將其轉換爲Runtime.exec()可以使用的本地文件系統路徑。

這可能會直接適用於您的情況。

File jarLocation = Paths.get(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()).toFile(); 

你也可以在Converting Java file:// URL to File(...) path, platform independent, including UNC paths看到討論。