带有完整路径的getResourceAsStream(String)返回null但文件存在

时间:2013-12-06 18:12:18

标签: java inputstream jogl

嗯,我真的不知所措。我尝试了一些JOGL并希望在Object上获得纹理。我通常这样做:

Texture[] thumbs = new Texture[pics.length];

try {
    for (int i = 0; i < thumbs.length; i ++){
        InputStream stream = getClass().getResourceAsStream(pics[i].getPath());
        data = TextureIO.newTextureData(stream, false, "jpg");
        thumbs[i] = TextureIO.newTexture(data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

通常这可以正常工作,如果jpg文件在源目录中,但这次文件位于其他地方,我收到一个IOException,表示流是null

pics[i].getPath()返回此字符串:C:\beispieluser\bjoern\eigene_bilder\eckelsheim.jpg。这是文件所在的确切路径。有人可以告诉我,我的想法在哪里出错了吗?

3 个答案:

答案 0 :(得分:4)

getResourceAsStream()和朋友们只会打开“类路径资源”,它们是类路径中出现的文件以及编译的类。要打开该文件,请使用new File()或(在Java 7上)Files.newInputStream()

答案 1 :(得分:0)

getResourceAsStream()查找类路径中的资源。我很确定它不适用于磁盘上其他地方的绝对路径。

答案 2 :(得分:0)

  1. 您的文件夹不是类路径的一部分。 你可以添加它,但我不认为像图像这样的资源是类路径的一部分。
  2. 使用FileInputStream:
  3. 代码:

    try{
        for (int i = 0; i < thumbs.length; i ++){
          File file = new File(pics[i].getPath());
          FileInputStream stream = new FileInputStream(file);
          data = TextureIO.newTextureData(stream, false, "jpg");
          thumbs[i] = TextureIO.newTexture(data);
        }
    } catch (IOException e) {
       e.printStackTrace();
    }