2012-07-23 92 views
1

我嘗試檢索可執行jar文件所在目錄的路徑。 這意味着:我有以下結構:如何獲取我運行的jar文件所在目錄的路徑?

--> Application (this is a folder somewhere in my file system) 
    --> application.jar (this is my java application 
    --> SomeData (folder in the same directory like the application) 
     --> some other folders 
     ...... 

當我開始通過命令行我想解析SomeData文件夾內的一些文件我application.jar。 在https://stackoverflow.com/a/320595/1540630他們已經展示瞭如何獲得運行jar文件的當前路徑,但是當我執行語句:

System.out.println(XMLParser.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

...我只是得到如下結果:

/.../Application/application.jar 

但我只是想有:

/.../Application/ 

更好的在後面的步驟說我需要

/.../Application/SomeData/SomeFolder/data.xml 

有人能幫助我嗎?

回答

4

CodeSource.getLocation()給你一個URL,那麼你就可以創建相對於新的網址:

URL jarLocation = XMLParser.class.getProtectionDomain().getCodeSource().getLocation(); 
URL dataXML = new URL(jarLocation, "SomeData/SomeFolder/data.xml"); 

不能簡單地做new File(...getCodeSource().getLocation().getPath())爲URL路徑是不保證在所有平臺上都是有效的本地文件路徑。如果可以的話,您更加安全地使用URL並將URL直接傳遞給XML解析器,但如果您確實需要java.io.File,則可以使用an idiom like this從URL創建一個URL。

+0

問題是,我不能只將一個URL到一個XML到XML解析器。在我的SomeData文件夾下面有許多其他文件夾,在這些文件夾內部,每個文件夾都有一個xml。我必須遍歷所有文件夾中的所有xml文件。但起初我只想到達xml文件的「根」文件夾......所以這不是應用程序所在的根文件夾,而是所有其他fodlers和xmls所在的文件夾(所以對於我們的例如,這將是「SomeData」文件夾 – Metalhead89 2012-07-23 13:54:19

+0

如何獲得我的根文件夾的URL CodeSource.getLocation() 只是給了我應用程序的URL:...../Application/application.jar。但是這對我沒有用:( – Metalhead89 2012-07-23 14:04:35

+0

是的,一旦你有了一個到JAR文件的URL,你就可以使用相對路徑創建其他URL,就像HTML頁面中的相對鏈接針對包含HTML文件的文件夾一樣被解析 - 所以'新URL(theJarUrl,「SomeData/SomeFolder /」)'是URL文件:/..../ Application/SomeData/SomeFolder /',然後你可以使用技術I將它轉換成'File'鏈接到我的答案結束 – 2012-07-23 15:14:16

1

一旦你的罐子的位置,您可以使用

new File(new File(jarPath).getParent(), "SomeData/SomeFolder/data.xml"); 
+0

其實它現在應該工作,就像你說的那樣。我寫道: 字符串路徑= XMLParser.class.getProtectionDomain()getCodeSource()的getLocation()的getPath();。 File file3 = new File(new File(path).getParent(),「SomeData」); 當我打印它說: ... \ Application \ SomeData 其實這應該沒問題,但如果我通過文件夾循環,我得到一個nullpointer exeption,這是不能的。 – Metalhead89 2012-07-23 13:39:31

+0

嘗試上市'新文件(jarPath).getParentFile()。listFiles()' – 2012-07-23 13:43:27

+0

我仍然得到一個空指針異常:( – Metalhead89 2012-07-23 13:46:20

1

既然你已經有路徑作爲一個字符串。你可以試試下面的

String path = XMLParser.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

String parentFolder = new File(path).getParent(); 
+1

'path'是URL的路徑部分,它不一定是有效的文件路徑(它可能在類Unix系統上,但不會在Windows上)。 – 2012-07-23 13:11:28

相關問題