2011-03-17 59 views
4

我在eclipse中有一個小型的Java項目。該項目有一個src和bin文件夾(典型),src被添加到類路徑中。我在Windows上運行。getResourceAsStream()返回內容爲空的流

以下調用工作:

System.out.println(TestINI.class.getResource("happytest.ini")); 

它打印出文件的路徑:

file:/D:/work/baton/Touch/JTouch/bin/com/interra/tests/happytest.ini 

我檢查了上面提到的ini文件的內容已預期的內容。

但是從文件中讀取如下:

InputStream is = TestINI.class.getResourceAsStream("happytest.ini"); 

給了我這沒有內容的輸入流。即它返回一個零字節的文件。

我的Eclipse是在Windows 7

谷歌運行3.6太陽神64位搜索顯示情況下的資源路徑或輸入流爲空,但不是我的情況。

的類路徑條目如下:

<classpathentry kind="src" path="src"/> 
... other class path entries for libraries like ini4j 
<classpathentry kind="output" path="bin"/> 
+1

當「檢查INI文件的內容,」你在bin文件夾或看src文件夾?我懷疑你可能沒有做完整的重建和/或ini文件沒有被複制到bin目錄結構中。請注意,將src目錄樹放入類路徑不是答案,因爲它通常在運行時不可用。 「 – 2011-03-17 18:28:44

+2

」給我一個沒有內容的輸入流,即它返回一個零字節的文件。「你是怎麼試用這個的? – adarshr 2011-03-17 18:35:39

+0

我剛剛在一個靜態主目錄下的同一目錄中有一個測試類。測試類有:InputStream s = TestIni.class.getResourceAsStream(「happytest.ini」);然後我從輸入流中讀取。 – 2011-03-19 04:50:00

回答

0

這正是吉姆·加里森說 - 你在「src」中編輯的文件,並從「本」讀...

+0

是的,我同意..我只是對eclipse的工作方式感到困惑。 – 2011-03-19 04:48:28

1

我嘗試了你的榜樣,並與getResource()getResourceAsStream()以及爲我工作。我知道這並不令人放心。

無論如何,有趣的是,你的流沒有內容,嘗試了這一點:

new FileInputStream(new File(TestINI.class.getResource("happytest.ini").toURI())); 

如果你讀這個流並沒有什麼內容,那麼什麼是錯的與你的文件。爲了測試,我在Stream s上調用了read()方法。

+0

這隻有在資源是磁盤上的實際文件時纔有效,它可能不是。 – skaffman 2011-03-17 21:42:11

0

我想我找出了問題所在。對於ini文件,我的eclipse默認打開記事本。我通過ini文件中的記事本做出的更改,他們沒有正確反映在eclipse上。今天,當我通過Eclipse的文本編輯器編輯文件時,他們在getResourceAsStream()調用中正確地反映出來。本質上在通過記事本進行編輯之後,eclipse中的資源不同步。

+0

我只是浪費了幾個小時來尋找更加奇特的案例。我有一個程序從包含它的JAR中讀取某些文件,並將它們寫入文件系統中的目標目錄。由於某些需要,我在classpath中有工作目錄,並有一個測試將這些文件寫入工作目錄。結果是getResourceAsStream()在創建後立即從工作目錄中獲取文件,所以顯然它讀取和寫入空文件。謹防萬一您發現自己處於類似的情況。 – zakmck 2012-08-27 23:54:00

相關問題