2011-09-07 52 views
1
public InputStream getResourceAsStream (Class className, String name){ 
     InputStream in = null; 
     in = className.getClassLoader().getResourceAsStream(name); 
     return in; 
    } 

className:使用Class.forName()加載的類。ClassLoader的異常行爲

名稱:存在於同一目錄中的資源的名稱。

問題:結果始終爲空。

有誰能告訴我上面的代碼有什麼問題,儘管我已經嘗試了很多方法。

回答

1

幾天前我自己也面臨同樣的問題。但是我發現我通過這個名字的方式是錯誤的。我的意思是我搞砸了相對路徑和絕對路徑。如果它無法找到名稱,那麼它將拋出一個nullpointerException。

要檢查您的代碼是否正常並且問題只與名稱有關,只需對該名稱的整個路徑進行硬編碼並確保其加載。如果是這樣的話,那麼你必須糾正它的正義問題。其次,唯一的問題是如果你從靜態塊加載它,那麼語法可能會有所不同。否則應該沒有問題。

一個很好的地方,在ü可以檢查出文件的加載是 http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html?page=2

讓我知道,如果這有助於..

+0

謝謝Raveesh,解決方案正在工作。我錯過了替換'。'與'/',現在它更換後工作正常。但是我確實有一個問題。我的一些圖像出現在同一位置,沒有被加載,但我可以在jar文件中看到它們。你知道它背後的任何可能的原因嗎?謝謝 – Ashish

0

如果所有的圖像都在JAR文件中,然後我假設你會做出一個單獨的圖像文件夾。這樣,你可以通過簡單地替換圖像名稱來以相同的方式訪問所有圖像。我相信的是,一旦你製作了jar文件,一切都在其中爆炸。如果你的圖像放在父文件夾下面,例如com/demo/images,那麼你可以簡單地使用上面的方法,並提供aboslute路徑,即getResourceasStream(/com/demo/images/image001.jpeg)。有一種方法可以做到這一點。當你在服務器上部署時,你可以創建一個單獨的圖像文件夾作爲一個系統屬性,然後簡單地做一個system.getenv(prop_name),這樣它就可以通向該圖像位置。實際上有幾種方法可以做到這一點。

+0

,你能解釋如何創建圖像文件夾作爲系統屬性? – Ashish