2013-08-19 30 views
2

所以基本上我在我的兩行代碼如下:問題,當試圖在Java中使用的getResourceAsStream

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/config"); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 

,並在Eclipse我的文件結構如下(圖片貼):

enter image description here

當我嘗試運行這段代碼時,當它到達第二行(BufferedReader行)時,我得到NullPointerExceptions。我無法理解爲什麼InputStream「正在」變爲空。有任何想法嗎?

+2

嘗試'的getResourceAsStream( 「qbooksprintfix /資源/配置」)'。更多細節[here](http://stackoverflow.com/a/18280628/2581401) –

+0

@ c.s。杜,那工作! – user1806716

+1

@AndyThomas:路徑是相對於類的包whan使用Class.getResourceAsStream,但不使用ClassLoader.getResourceAsStream()時。在後一種情況下,路徑總是絕對的。 –

回答

0

getResourceAsStream()外觀的類路徑中的項目,所以在你的情況下, 「基地」 目錄很可能是src

InputStream is = this.getClass().getClassLoader().getResourceAsStream("qbooksprintfix/resources/config"); 
+1

當使用類加載器的'getResourceAsStream()'時,所有路徑都是絕對路徑,所以你不應該使用'/' –

+0

@ c.s。啊!我通常從'Class'而不是'ClassLoader'執行'getResourceAsStream()',所以不知道有什麼區別! –

+0

是的,這是他們的主要區別。請修復您的答案,以便我刪除我的downvote –

0

這應該是

getResourceAsStream("qbooksprintfix/resources/config"); 

或最好

Thread.currentThread().getContextClassLoader().getResourceAsStream("qbooksprintfix/resources/config"); 
4

當您使用類加載器加載流時,您正在使用的路徑總是一個絕對路徑(所以你在這種情況下不應該使用使用領先的/),並應該從你的根包開始。在你的情況下,這是在src

那麼既然你的資源是包下qbooksprintfix/resources你應該訪問它想:

getResourceAsStream("qbooksprintfix/resources/config")