2013-03-03 70 views
8

我想讀將被納入一個.jar的資源,但我得到一個空指針 以下:閱讀資源使用的BufferedReader

bReader = new BufferedReader(new InputStreamReader(
        this.getClass().getResourceAsStream("resources/" + fileName))); 

但使用文件,工作正常..

bReader = new BufferedReader(new FileReader(new File("resources/" + fileName))); 
+0

您能打印出錯誤的堆棧跟蹤嗎? – christopher 2013-03-03 17:20:43

+1

'this.getClass()'的完全問題名稱是什麼,jar文件在哪裏? – 2013-03-03 17:21:51

+0

線程「AWT-EventQueue-0」中的異常java.lang.NullPointerException \t at java.io.Reader。 (Reader.java:61) \t at java.io.InputStreamReader。 (InputStreamReader.java:55) – Skogen 2013-03-03 17:29:25

回答

14

假設你的IDE或Maven或構建過程將在根包括「資源」的內容罐子,嘗試「/」找到它。

bReader = new BufferedReader(new InputStreamReader(
          this.getClass().getResourceAsStream("/" + fileName))); 

UPDATE:

確保 「資源」 文件夾設置爲源文件夾。

+0

我使用Eclipse,並在Eclipse中運行它時獲取NullPointer。 .jar與這個問題無關,除了事實上,如果沒有計劃在最後創建一個.jar文件,我會使用該文件的例子。 – Skogen 2013-03-03 17:28:14

+0

如果將文件拖放到項目文件夾中,則可以使用「/」找到該文件,但是無法從可執行文件夾中找到該文件。 – Skogen 2013-03-03 18:08:49

+0

@Skogen:查看更新。 – sgp15 2013-03-04 04:03:54

-1

this.getClass().getResourceAsStream("resources/" + fileName)從類路徑加載文件爲new File("resources/" + fileName)從工作目錄加載文件(eclipse中的項目根目錄)。爲了使前面的工作,你需要添加包含resources目錄的jar到你的classpath中。

+0

新文件(「resources /」+ fileName)不是主動。 – USer22999299 2016-01-17 12:11:29

0

這是一個Spring框架項目嗎?嘗試:

BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream())); 

資源加載坐在在src/main/resources目錄:

Resource to load is sitting in the src/main/resources directory

0

集 「資源」 文件夾中的資源文件夾。 試試這個代碼:

bReader = new BufferedReader(new 
     InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName))) 
0

不像getClassLoader().getResourceAsStream(filename),您使用getClass().getResourceAsStream(filename)的版本使用相對於類的位置的路徑,而不是classpath根目錄。您需要使用絕對路徑getClass().getResourceAsStream("/" + filename)或使用ClassLoader版本。

另外,確保你的類路徑中有「resources」(如果你使用的是Maven,它應該是相對於你的pom.xml的「src/main/resources」)。如果是這樣,你不需要在你的文件名中實際包含「資源」,因爲這是類路徑根。