Eclipse为src/main/resources添加**排除规则后,如何读取资源文件?
解决Eclipse Maven项目中src/main/resources资源文件读取问题
嘿,我之前也碰到过这个疑惑!先给你吃个定心丸:Eclipse给src/main/resources加排除规则真不是bug,是Maven Eclipse插件的正常设计~
为什么会有这个排除规则?
Maven本身会自动把src/main/resources下的所有文件复制到项目的target/classes目录(这才是类路径实际指向的位置)。Eclipse标记源文件夹里的资源为排除,是为了避免在编译过程中重复处理这些文件——毕竟最终运行时读取的是target/classes里的副本,完全不影响功能。
正确读取资源文件的几种方式
下面给你几个靠谱的实现方法,都是生产环境通用的:
1. 使用当前类的getResourceAsStream()
适合读取和当前类同包(或相对路径)的资源文件:
// 假设你的类在com.example包下,读取resources/com/example/config.properties InputStream is = getClass().getResourceAsStream("config.properties"); // 如果是resources根目录下的文件,记得加斜杠开头 InputStream is = getClass().getResourceAsStream("/app.properties");
2. 使用ClassLoader的getResourceAsStream()
这种方式不需要考虑当前类的包路径,直接从类路径根目录查找:
InputStream is = getClass().getClassLoader().getResourceAsStream("app.properties"); // 注意:这里的路径不要加开头的斜杠
3. 不推荐:直接读取源文件夹文件(仅调试用)
如果你只是开发调试时想直接读源文件夹里的文件,可以用File类,但打包成JAR后这种方式会失效,不建议用于生产:
File file = new File("src/main/resources/app.properties"); InputStream is = new FileInputStream(file);
验证方法
你可以去项目的target/classes目录看看,src/main/resources里的文件肯定已经被Maven复制过去了——类路径读取的就是这里的文件,完全不受Eclipse排除规则的影响。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

