2011-03-17 262 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