2013-06-27 162 views
42

假設標準的maven設置。如何在項目的/ resources文件夾中獲取文件的絕對路徑

說你的資源文件夾中有一個文件abc

在Java中,我該如何獲得文件的絕對路徑?

+0

你想編寫一個Maven插件嗎?或者當你的程序執行時你想訪問文件嗎? –

+0

相關:http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

回答

14

您可以創建一個File對象,並使用getAbsolutePath方法:

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

有限使用的建議,因爲它依賴工作目錄作爲maven根。即使如此,您應該使用'target/classes/abc.txt'來引用該文件,因爲這是Maven在處理後放置資源文件的規範地方(例如,maven-resources插件可能已經完成了屬性替換的abc.txt)。通過類路徑中的getResource()使用abc.txt會更好。 –

+1

如果最終用戶將您的應用程序作爲可執行JAR運行,該怎麼辦?那麼根本就不會有物理文件。這是您應該使用getResource()的另一個原因,例如打開它的輸入流取決於你想用它做什麼。 –

+4

這可以作爲正確答案被刪除嗎? @Karol S在下面回答 - 這應該是正確的答案(因此upvote差異) – DanGordon

104

,實際工作的正確方法:

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

不要緊,現在在哪裏在classpath中文件是物理只要資源實際上是文件而不是JAR條目,就會發現它。

(看似明顯new File(resource.getPath())並不適用於所有的路徑工作!路徑仍然是URL編碼!)

+3

或者大概你可以這樣做:'new File(resource.toURI())。getAbsolutePath();'(即我不認爲你需要Path對象?) –

+1

好的提示關於toURI(),這樣可以避免你的路徑中的空格以%20的形式出現! –

+17

謝謝!這幾乎爲我工作。但我不得不作出一個更改:YourClass.class.getClassLoader()。getResource(「abc」); – yngwietiger

11

您必須specifie路徑從/

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

開始創建的類加載器實例您需要的課程,然後您可以輕鬆訪問文件或資源。 現在您使用該類的getPath()方法訪問路徑。

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path); 
相關問題