无法读取本地资源

时间:2013-06-17 06:34:16

标签: java io stream

我有一个项目(在Eclipse中,但没关系),层次结构如下:

-src
---Start.java
---resources
-----media
-------intro.wav
-----textures
-------logo.png
-------tiles.abotm

Start.java中,我正在尝试使用tiles.abotmClass.getResourceAsStream(String)作为InputStream:

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中打开它?

- EDIT-- 我忘了提到我在名为textures的{​​{1}}目录中有另一个文件,我能够以完全相同的方式打开和阅读,完全没有问题。它只是这个文件。

- 在回复fge时,这是实际的代码:     Loader.loadTextureMap(“/ resources / textures / tiles.abotm”); //这是在单独的类中的单独方法中调用的。

logo.png

1 个答案:

答案 0 :(得分:1)

经过大量讨论后,代码适用于OP:

final byte[] buf = new byte[1024]; // or other
final URL url = Start.class.getResource("whatever");
// check for url == null

InputStream in;
ByteArrayOutputStream out;

// I really wish this syntax was something else, it sucks
try (
    in = url.openStream();
    out = new ByteArrayOutputStream();
) {
    int count;
    while ((count = in.read(buf)) != -1)
        out.write(buf, 0, count);
    out.flush();
} catch (IOException e) {
    // handle e here
}

final ByteBuffer buffer = ByteBuffer.wrap(out.toByteArray());
// use the buffer