我正在使用Maven进行桌面应用.我读了大约
Maven standart directory layout,现在我有这个项目结构:
App |-- pom.xml `-- src |-- main |-- java | `-- java classes |-- resources | `-- images | `-- app images `--config `--config.xml
我想找到一种方法来加载我的资源和配置文件.我阅读了一些文章和主题并找到了这个(我的代码中的简化示例):
//class for loading config public class Preferences { public Preferences() { InputStream image = Preferences.class.getResourceAsStream("images/image.png"); InputStream config = Preferences.class.getResourceAsStream("config.xml"); } }
但是image和config变量包含null.我正在尝试不同的加载变体(从根文件夹,使用this.getClass()而不是Preferences.class,以及其他),但我总是为null.我真的不明白这个资源加载系统,我没有找到任何关于它的好文档.如果有人对这种机制做出了很好的解释(或者只是在文档上给出一个链接),那就太好了.
因此,主要问题是:如何加载我的资源和配置文件?
解决方法@H_502_13@
我想我找到了解决方案.正如Juned Ahsan和mR_fr0g所写,我需要使用ClassLoader类,而不是this.getClass().getResource().但是,它仅适用于资源文件夹.但是maven允许添加其他文件夹作为资源文件夹.我只需要将此部分添加到pom.xml:
<build>
<resources>
<resource>
<directory>src/main/config</directory>
</resource>
</resources>
</build>
而且工作的java代码是:
InputStream image = this.getClass().getClassLoader().getResourceAsStream("images/image.png");
InputStream config = ClassLoader.getSystemResourceAsStream("config.xml");
<build> <resources> <resource> <directory>src/main/config</directory> </resource> </resources> </build>
而且工作的java代码是:
InputStream image = this.getClass().getClassLoader().getResourceAsStream("images/image.png"); InputStream config = ClassLoader.getSystemResourceAsStream("config.xml");