2013-04-26 33 views
1

如果hello.jar與maven一起編譯,我想訪問位於文件夾/ file.file下的資源。但是我不知道如何讓目前的JAR我在的URL。請問在.jar中獲取該程序正在運行的文件的URL

file://./folder/file.file 

正常工作,或者,

jar:file://./!hello.jar/folder/file.file 

或有更簡單的方式來做到這一點?

(對不起,愚蠢的問題,我是新來的行家。)

+0

哪裏資源位於何處?在'jar'中?你從哪裏找到maven的程序? – 2013-04-26 15:48:49

+0

資源位於jar(在源代碼中,位於src/main/resources/folder/file.file下),我從src/main/java/package/package/package/file下的程序中找到該資源。 java的。嗯是的。 – aLaserShark 2013-04-26 15:52:50

+0

在這種情況下JohnKlehm是正確的。 – 2013-04-26 16:08:27

回答

4

這個工作對我來說:

URL url = this.getClass().getProtectionDomain().getCodeSource().getLocation(); 
String jarPath = URLDecoder.decode(url.getFile(), "UTF-8"); 

jarPath則包含jar文件的完整路徑,與該班級代碼位於。

請注意通過URLDecoder的「繞行」,否則如果jar文件位於包含空格的目錄中,則會得到包含%20的文件名。

+0

謝謝,會嘗試。 – aLaserShark 2013-04-26 15:53:19

+0

這對我有用。爲了在jar文件中獲得一個文件,我做了:'''''''''''''''jar jarPath = URLDecoder.decode(rawurl.getFile(),「UTF-8」); URL imgurl = new URL(「file://」+ jarPath +「folder/file.file」)' – aLaserShark 2013-04-26 16:40:32

3

您可以通過找到一個罐子的資源:

String resRelativePath = "folder/thing.jpg"; 
URL resUrl = this.getClass().getResource(resRelativePath); 
+0

這給了我一個錯誤,如下所示:String resRelativePath =「folder/file.file」; URL resUrl = this.getClass()。getResource(resRelativePath); System.out.println(resUrl.getPath());'我在最後一行得到一個nullpointerexception ...我可能錯過了一些愚蠢的東西 – aLaserShark 2013-04-26 16:39:22

相關問題