2013-02-25 107 views
3

我在eclipse中的資源文件夾中有一個圖像,我使用的問題是我不知道如何包含它,絕對路徑很長,getResource返回一個空指針。我搜索谷歌和SO,並嘗試通常的解決方案無濟於事。資源文件夾位於我的構建路徑中,我正在運行代碼的類位於構建路徑中,但以下兩個都返回null。Java資源,返回空指針

System.out.println(getClass().getResource("data.txt")); 
System.out.println(getClass().getResource("/resources/data.txt")); 

現在嘗試:

System.out.println(getClass().getResource("001.txt")); 

還是返回null。

System.out.println(getClass().getResource("/001.txt")); 

也爲null。

右鍵單擊該文件,其路徑相對於尋找到工作區(右鍵單擊文件,屬性,路徑)

System.out.println(getClass().getResource("/ovinger/resources/sokoban_levels/001.txt")); 

也爲空

這裏是工作空間和資源文件夾中的圖片。該代碼正在運行「TestSokoban.java」 Buildpath Workspace 我甚至擔心日食缺乏搜索我的桌面,運行管理員,仍然是同樣的問題的權利。

+0

你看過[這個回答] [1]?看起來像你的問題的答案。 [1]:http://stackoverflow.com/questions/2343187/loading-resources-using-getclass-getresource – DigCamara 2013-02-25 22:24:53

+2

永遠圖像更糟糕的文件名。不知道它在類路徑上的位置,很難提供幫助。 – 2013-02-25 22:26:58

+0

下面的所有答案都返回null,我在這裏很茫然。想象一下在不同資源文件夾中爲gazzilion圖像進行組織的項目,我是否必須找到絕對路徑? – arynaq 2013-02-25 22:57:21

回答

2

沒有什麼比通過運行System.out.println(getClass().getResource("."));找出相對路徑的根位置更容易了。然後修改路徑以適當地適應相對路徑。它應該是該類所在的包,順便說一句。

+0

接受這個作爲我的答案,因爲這樣做幫助我找到資源文件夾的相對路徑。儘管如此,我仍然覺得.getResource()會在您的構建路徑中找到任何給定的文件,因爲OP中的圖像顯示資源文件夾是。 – arynaq 2013-02-26 12:47:43

-1

你不使用BufferedReader並將文件讀入字符串?

+0

它應該仍然打印出一個對象地址。 – 2013-02-25 22:26:55

0

getClass().getResource()從類路徑讀取,而不是文件系統路徑。所以,你應該使用來自classpath根目錄的包/資源符號。

0

請記住,如果您使用maven作爲項目,eclipse將執行編譯的代碼,默認情況下該文件夾位於bin文件夾或target文件夾。這意味着你必須建立這個項目。

執行構建後,查看bin文件夾並查找該文件。這是你必須加載的路徑。

假設你這樣做,而且該資源在classpath root然後結束了標準的方式是:

ClassLoader.getSystemResourceAsStream("file.txt"); 

但是,如果你仍然有問題,那麼嘗試使用:

Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt"); 

的後一種形式會幫助你,如果你正在執行一個產卵中的java class