2009-11-25 50 views
1

我編寫了一個完全基於單個文本文件的程序:我讀取文件,存儲信息,然後搜索信息等。因此,要使程序工作,該文件必須存在且可由程序檢測到。 我使用eclipse,所以我把這個文件放在默認的資源地圖(src/main/resources)中。在我的程序開始創建的文件:eclipse和JAR中的資源位置差異問題

private static File textFile = new File("src/main/resources/TEXT.TXT") 

然而,當我嘗試使用Maven我的程序包,我得到一個JAR中的所有類和資源文件都存在於同一個文件夾;我的程序停止工作,因爲它無法再找到該文件。

有關如何處理這個問題的任何幫助?我更喜歡我的程序在eclipse和JAR中運行的情況,但只有JAR纔是好的。

回答

3

您可以使用ClassLoader.getResourceAsStream從類路徑加載它(或getResource以獲取文件的URL)。

Thread.currentThread().getContextClassLoader().getResource("TEXT.TXT") 

這隻要可以作爲的src/main /資源是在Eclipse中的類路徑。 (maven eclipse插件默認包含它)。該文件必須位於jar文件中才能在eclipse之外工作。

+0

或者,getClass()。getClassLoader()。getResource (「TEXT.TST」),它在某些環境中更安全,因爲您將始終獲得代碼來自的類加載器。 – 2009-11-26 03:19:26

0

不錯的建議,這在eclipse本身中是完美的:返回文件的正確位置,我可以使用該文件做我喜歡的任何事情。 將程序作爲jar打開時,仍然存在問題。 getResource方法返回一個看似正確的位置:

/something/something/something/something/workspace/program/target/program-0.0.1.jar!/TEXT.TXT。

然而,當我這個URL轉換爲字符串,使用該字符串創建一個文件對象,並在我的程序使用此文件對象,我得到以下錯誤:

java.io.FileNotFoundException:文件:/something/something/something/something/workspace/program/target/program-0.0.1.jar /TEXT.TXT(沒有這樣的文件或目錄)

因此,該方法的getResource確實找到該文件,但程序莫名其妙地不能使用它..