2016-09-24 508 views
2

我有兩個方法來獲取罐路徑如何在Linux中使用java命令獲取當前正在執行的jar包的空間路徑?

1)

File file = new File(new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName()); 
String filename = file.getAbsolutePath().toString(); 

2)

String filename2 = Main.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6); 

第一種方法完全適用於Windows和Mac,但在Linux上,如果我的罐子如果我的終端位於/home/user/,即使MyJar.jar路徑爲'/home/user/Documents/test folder/',也會返回/home/user/MyJar.jar

對於每個操作系統,第二種方法將返回到文件的正確路徑,但空格替換爲%20。

例:/home/user/Documents/test%20folder/MyJar.jar

我怎樣才能獲得在Linux中的絕對路徑以同樣的方式我爲Windows和Mac做的,沒有20%的空間置換?

+0

如果第二個最適合你和你只是擔心' %20',那麼你可以簡單地添加'.replace(「%20」,「」)'來替換所有的空格! – user2004685

+0

更好地解碼jar的位置,而不是手動將%20替換爲空格 – Naruto

+0

我不知道這是解決該問題的解決方法,但「java.net.url.URLDecoder.decode」怎麼辦? – engineercoding

回答

2

我不確定爲什麼你在第一個解決方案中將你的File重疊了一倍。

try { 
    File f = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()); 
    System.out.println(f.getAbsolutePath()); 
} catch (URISyntaxException ex) { 
    throw new RuntimeException(ex); 
} 

(僅在Linux下測試)

(我不認爲的URISyntaxException將永遠在生產中拋出)

+0

都是如此,但實際上並沒有解決問題。 – EJP

+0

我的代碼給出了調用jar文件的絕對路徑,不管它是否包含空格。我不明白它不能解決問題。 –

+0

謝謝,它對我來說非常合適。 –

相關問題