2010-06-23 108 views
30

在我的Maven項目,我在main方法下面的代碼:Maven項目中資源文件的路徑是什麼?

FileInputStream in = new FileInputStream("database.properties"); 

,但總是找不到錯誤的文件。

我已經把文件放在src/main/resources中,並且它被正確地複製到了目標/ classes目錄(我相信這是Maven資源的預期行爲),但是在實際運行程序時似乎永遠找不到文件。我試過各種其他路徑:

FileInputStream in = new FileInputStream("./database.properties"); 
FileInputStream in = new FileInputStream("resources/database.properties"); 

等,但似乎沒有工作。

那麼,什麼是使用正確的路徑?


基於「不認的」回答以下,這裏是我需要的東西:

InputStream in = TestDB.class.getResourceAsStream("/database.properties") 

其中TestDB是類的名稱。

感謝您的幫助,不要!

回答

51

不能加載該文件直接這樣,你需要使用資源抽象(資源不僅可以在文件系統中,但在類路徑上的任何地方 - 在一個jar文件或其他方式)。這種抽象是加載資源時需要使用的。資源路徑與您的類文件的位置有關,因此您需要預先安裝一個斜線以獲取「根」:

InputStream in = getClass().getResourceAsStream("/database.properties"); 
+0

如果您嘗試從靜態方法訪問文件,getClass()不起作用。在這種情況下是否有其他選擇? – acarlow 2010-06-24 01:52:34

+4

使用類名稱,例如Main.class.getResourceAsStream()。你可以使用任何類或類加載器,所以hread.getContextClassLoader()。getResourceAsStream()也可以。 – 2010-06-24 07:45:16

相關問題