【发布时间】:2013-06-17 06:34:16
【问题描述】:
我有一个项目(在 Eclipse 中,但这没关系),其层次结构如下:
-src
---Start.java
---resources
-----media
-------intro.wav
-----textures
-------logo.png
-------tiles.abotm
在Start.java 中,我尝试使用Class.getResourceAsStream(String) 将tiles.abotm 作为输入流:
public class Start
{
public static void main(String[] args)
{
try
{
InputStream in = Start.class.getResourceAsStream(
"/resources/textures/tiles.abotm");
}catch(Exception e){
e.printStackTrace();
}
}
}
够简单吧?抱歉不行。 InputStream 完全为空,大小为 0。我还尝试将 FileInputStream 直接打开到tiles.abotm 的绝对位置,但我得到了同样的结果!我知道文件不是空的。事实上,根据 Windows、Eclipse 和用于创建前面提到的 FileInputStream 的 File 对象,它有 2,257 个字节。同样根据File对象,它是可读的,可写的,它存在,它不是一个目录,它的名字是tiles.abotm。那么,如果 File 对象可以读取,为什么不能在 InputStream 中打开呢??
--编辑--
我忘了提到我在textures 目录中有另一个文件,名为logo.png,我可以以完全相同的方式打开和读取它,完全没有问题。只有这个文件。
--回复fge,实际代码如下: Loader.loadTextureMap("/resources/textures/tiles.abotm");//这个在单独的类中的单独方法中调用。
public class Loader{
public static TextureMap loadTextureMap(String texMap){
DataInputStream dis = new DataInputStream(
Start.class.getResourceAsStream(texMap));
//It then goes on to read it, but I've determined that at this point,
there is nothing in this DataInputStream.
}
}
【问题讨论】:
-
当你说“绝对位置”时,你的意思是从/开始吗?
-
我相信 Eclipse 要求它的资源存在于资源文件夹而不是源文件夹中。您可以尝试使用
/src/resources/textures/tiles.abotm之类的东西作为测试,但我会在您发布之前进行更改 -
旁注:
.getResourceAsStream()永远不会抛出异常;如果资源不存在,则返回null。 -
各位,请看一下编辑。