You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:32:53