2014-01-17 22 views
0

之前大家都告訴我,這是一個重複,請聽我說......得到一個罐子的可執行文件路徑中的Java 7

當你需要從運行罐子裏面絕對可執行文件的路徑(=路徑個體經營)不管當前的工作目錄,在舊時代(Java 6的JRE 1.6)的這個使用像一個魅力的工作:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); 

如今在Java 7中(JRE 1.7)這只是返回 「./」。如果你想測試這個,你需要創建一個可運行jar,因爲從源代碼編譯時,你會得到預期的路徑。

這讓我很生氣,因爲我一直在尋找一種永恆的解決方案。我採取了硬編碼的絕對路徑,但顯然這意味着罐子不是便攜式的。

有誰知道該怎麼辦?

謝謝!

回答

0

剛剛導出一箇舊的Java 6項目,也使用相同的方法來獲取執行路徑後,偶然發現同樣的問題。 這裏有一個快速的解決方法(與你的類名或使用「的getClass()」代替「Start.class」):

String path = Start.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
path = new File(rootFolder).getAbsolutePath(); 

最有可能你會最終有一個路徑仍與一個週期結束。所以,你可能要修復,使用:

if (path.endsWith(".")) path = path.substring(0, path.length() - 1); 

使用Oracle JRE 7測試在Windows 7的64位和Xubuntu的14.04

+0

對不起都沒有機會去嘗試。將盡快回復 –

相關問題