解决IntelliJ IDEA新增资源文件夹无法读取文件的问题
我来帮你搞定这个资源读取的问题,你遇到的情况其实挺常见的,咱们一步步排查解决:
排查步骤与解决方案
1. 先确认IDEA的资源文件夹配置是否真正生效
- 打开「项目结构」(快捷键
Ctrl+Alt+Shift+S),切换到「模块」→ 你的ProjectName_main模块,再切到「资源」标签页:- 确认
/tmp/resources被标记为资源根目录(图标是黄色的文件夹,和src/main/resources一致)。 - 检查它的「输出路径」是否和
src/main/resources相同,比如都是out/production/resources(IDEA默认编译输出)或者target/classes(Maven/Gradle输出)。如果输出路径不同,编译后两个资源文件夹的内容不会放在同一个classpath下,自然读不到。
- 确认
2. 调整资源读取的路径写法
你现在用的Hoge.class.getClass().getResourceAsStream("main.txt")是从当前类所在的包路径下去找资源,而/tmp/resources是根级别的资源文件夹,tmp.txt会被放到classpath的根目录下,所以读取方式要改:
- 用带斜杠的路径从classpath根读取:
Hoge.class.getClass().getResourceAsStream("/tmp.txt")(注意开头的/)。 - 或者用类加载器的方式(更直接指向classpath根):
Hoge.class.getClassLoader().getResourceAsStream("tmp.txt")(这里不需要斜杠)。
可以先打印当前classpath确认资源是否在里面,方便排查:
System.out.println(System.getProperty("java.class.path"));
看看输出里有没有/tmp/resources,或者编译输出目录里有没有tmp.txt文件。
3. 如果用Maven/Gradle构建,必须在构建脚本里声明外部资源
IDEA的资源文件夹设置会被Maven/Gradle的配置覆盖,所以光在IDEA里加没用,得在构建脚本里添加:
Maven(pom.xml)
在<build>标签里添加:
<resources> <!-- 新增外部资源目录 --> <resource> <directory>/tmp/resources</directory> <includes> <include>**/*.txt</include> </includes> </resource> <!-- 保留原有资源目录 --> <resource> <directory>src/main/resources</directory> </resource> </resources>
添加后点击Maven工具栏的「刷新」按钮,让配置生效。
Gradle(build.gradle)
在sourceSets里添加:
sourceSets { main { resources { srcDirs = ['src/main/resources', '/tmp/resources'] } } }
然后点击Gradle工具栏的「Reload All Gradle Projects」刷新配置。
4. 清理缓存并重新构建
有时候IDEA的缓存会搞事情,试试:
- 执行「Build」→「Clean Project」,清空旧的编译输出。
- 再执行「Build」→「Rebuild Project」,重新编译整个项目。
- 手动检查编译输出目录(比如
out/production/resources或target/classes),如果里面有tmp.txt,那读取应该就没问题了。
内容的提问来源于stack exchange,提问作者kensuke1984
相关产品推荐
相关产品推荐

