2012-01-06 49 views
5

我想加載一個二進制映像文件在我的服務器端Java代碼中做一些處理。我現在把我的形象在我的執行類存在的包,並呼籲:如何在部署在Tomcat中的未爆炸戰爭文件中讀取資源文件?

Image img = Image.getInstance(this.getClass().getResource("logo.png")); 

這時候,我對我的發展框的分解戰爭設置Tomcat運行,但是當我部署到服務器工作正常運行Tomcat的地方不會爆炸war文件,對getResource的調用返回null。

我也試着將圖像移動到我的上下文根和訪問它像這樣:

Image img = Image.getInstance(this.getClass().getResource("/../../logo.png")); 

同樣,這個工作對我的發展中,而不是當我在其他地方部署。

有沒有更好的方法來訪問這個文件?我究竟做錯了什麼?

謝謝!

+0

也許我應該也提到我使用Maven構建我的Web應用程序。我有一個完整的答案可以解決我的問題,但我無法在自己的問題上發佈8個小時。 – 11101101b 2012-01-06 21:29:33

+0

將資源放入「src/main/resources」目錄。 然後訪問它們: this.getClass()。getResource(「/ logo.png」); 或者: Thread.currentThread()。getContextClassLoader()。getResource(「logo.png」); – 11101101b 2012-01-06 21:31:11

回答

5

如果您正在使用Maven構建,你要確保圖像實際上被放入檔案。

將資源放入您的src/main/resources目錄。然後訪問他們:

this.getClass().getResource("/logo.png"); 

或:

Thread.currentThread().getContextClassLoader().getResource("logo.png"); 

(從上面註釋代碼樣本,但投入的答案更可見)

+0

在第一種情況下,請不要忘記文件名前的'/' – 2014-11-04 07:03:11

1

你可以把你的圖片在你的classpath的根目錄,並嘗試這個辦法:

Thread.currentThread().getContextClassLoader() 
       .getResource("logo.png"); 
+1

+1 - 在你的類路徑的根目錄下,WAR文件中的「WEB-INF/classes」是許多將放置所述資源的地方。雖然他們可以在那裏使用像「images/logo.png」這樣的文件夾進行整理。 – rfeak 2012-01-06 20:51:37