从java项目的子文件夹加载ResourceAsStream

从java项目的子文件夹加载ResourceAsStream,java,Java,我确信这是一个基本问题,我就是搞不懂 我正在尝试加载位于项目的images子文件夹中的一组图像 这是我的密码 package com.ieml.swt.diploma; import java.io.InputStream; public class loadTest { public static void main(String[] args) { System.out.println(getResourceImage("marks.png")); }

我确信这是一个基本问题,我就是搞不懂 我正在尝试加载位于项目的images子文件夹中的一组图像

这是我的密码

package com.ieml.swt.diploma;

import java.io.InputStream;



public class loadTest
{


    public static void main(String[] args) 
    {

System.out.println(getResourceImage("marks.png"));
    }


    public static InputStream getResourceImage(String fileName) {

        return loadTest.class.getResourceAsStream("./images/" + fileName);
    }
}
我有一个用于src和类文件的分离文件夹 java文件位于src/com/ieml/swt/diplication文件夹中 bin/com/ieml/swt/diplication文件夹下的.class文件
我试图加载的文件确实存在于“loadTest/images”子文件夹loadTest是我项目的根目录 它只是打印为空,就像它没有加载此文件一样
我在这里遗漏了什么吗?

我相信Class.getResourceAsStream将采用相对于类文件位置的路径,在您的例子中是classes/com/ieml/swt/diplication文件夹。你可能想试试

  loadTest.class.getClassLoader().getResourceAsStream("../images/" + filename);
我假设您的图像文件夹与bin或classes文件夹处于同一级别。基本思想是,您可以通过类加载器根(类路径根)的相对路径获取资源

这并不总是一个好主意,但由于这看起来像一个学校项目,我认为这不会是一个问题。

getResourceAsStream()方法加载类路径资源。图像目录是否在类路径中

loadTest.class.getResourceAsStream("./images/" + fileName);
这将查找
bin/com/ieml/swt/diplicial/images
下的图像,即相对于
.class
文件的图像。如果您在开头省略了点,它将在
bin/images
中查找


但是无论您做什么,
Class.getResourceAsStream()
都用于从类路径加载资源,即在
bin
文件夹中加载资源。没有办法访问外部的任何东西,而且也没有多大意义,因为它也是为JAR文件设计的。通常,您实际上将资源放在
src
文件夹中,并在构建期间将它们复制到
bin
(eclipse将自动执行此操作)。

根据您尝试执行的操作,这可能不是正确的方法。getResourceAsStream通常用于从类路径上的jar加载图标。如果您只是出于某种原因试图在磁盘上获取图像,请查看javax.imageio.imageio上的静态方法:

ye在这种情况下,我想到了复制的想法,这不会有问题,但是如果我的文件大小都像5-10MB呢?。这就是为什么我决定把它们放在一个单独的文件夹,而不是在垃圾箱。所以我尝试了loadTest.class.getClassLoader().getResourceAsStream(“./images/”+fileName);和loadTest.class.getClassLoader().getResourceAsStream(“/images/”+文件名);如果运气不好,你能解释一下在最后两个案例中,它在哪里查找文件吗?@usmazat:在这两个案例中,它都会在bin/images中查找。正如我所说的:无论您做什么,getResourceAsStream()都不能超出类路径。复制几个10MB的文件并不是什么大问题,特别是因为您不需要经常使用好的IDE进行完整构建。