无法访问资源文件夹中的文件

时间:2019-10-09 05:29:03

标签: java maven netbeans

我正在尝试加载存储在/ src / main / resources文件夹中的图像。但是,当我这样做时,我会遇到由于找不到资源而导致的NullPointerException。

这是代码段:

config/database.php?

这是我的项目文件树的图像:

An image of my project file tree

这是目标构建文件树的图像:

An image of my target build file tree

这是NullPointerException堆栈跟踪: https://pastebin.com/KqJVxWEL

我已经尝试过很好地使用我能想到的图像文件的所有可能路径。 (/src/main/resources/bern.png、src/main/resources/bern.png、/bern.png等)。

我还尝试使用config/database.php代替 try { String path = this.getClass().getClassLoader().getResource("bern.png").toString(); } catch (IOException ex) { System.out.println(path); } 。据我了解,getClass().getClassLoader().getResource()的{​​{1}}和getClass().getResource()版本之间的唯一区别在于,Class版本相对于根并不是固有的绝对值,而{{ 1}}版本是。

当我运行ClassLoader时,会得到指向getResource()目录的路径。这与我所读过的关于Class与目标构建文件树一起使用的方法的内容一致。但是,我没有看到资源文件夹显示在目标版本中的任何位置。我认为这是我问题的核心。我只是不确定如何解决它。

我知道这个问题以前曾被问过无数次,但是对这个问题的其他版本的回答并没有帮助我很多。

我正在使用NetBeans 11,并且该项目正在Maven构建系统上运行。过去我在Maven方面没有做太多工作,所以如果这个问题非常容易解决,请原谅我。

有人知道我要如何解决这个错误?

编辑:问题不在于我的项目结构或代码,如通过命令行使用ClassLoader运行时正确编译的代码所示。结果,这特别是NetBeans的问题以及它查看资源文件夹的方式。

1 个答案:

答案 0 :(得分:0)

以流(而不是URL或文件路径)的形式读取资源内容

public static void main(String[] args) throws IOException {
        InputStream in = Application.class.getClassLoader().getResourceAsStream("bern.png");
        BufferedImage testImage = ImageIO.read(in);
        ImageIcon icon = new ImageIcon(testImage);
    }