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

IntelliJ中Java项目资源文件存放与读取报错排查

解决类路径资源读取的FileNotFoundException问题

问题根源分析

你的代码报错主要有两个核心原因:

  1. IntelliJ资源目录配置错误:从返回的URL能看到,编译后文件被放在了resources子目录下,说明你的resources文件夹未被标记为IntelliJ的「资源根目录」,导致编译工具没有将资源文件直接输出到类路径根目录。
  2. 读取方式不兼容Jar包场景:File和FileReader仅能读取磁盘物理文件,一旦项目打包成Jar包,类路径资源会嵌入Jar内部,无法通过磁盘路径访问。

分步解决方案

1. 修正IntelliJ资源目录配置

右键项目中的resources文件夹 → 选择「Mark Directory as」→ 点击「Resource Root」。
完成后,编译时coding_qual_input.txt会直接输出到类路径根目录(即out/production/pyramidDecoder/下),不再嵌套在resources子目录中。

2. 改用通用的类路径资源读取代码

放弃依赖File类,使用getResourceAsStream直接读取资源流,这是Java读取类路径资源的标准方式,同时兼容磁盘文件和Jar包内资源:

public class Main {
    public static void main(String[] args) {
        // 从类路径根读取文件,路径前加斜杠表示从根开始查找
        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(Main.class.getResourceAsStream("/coding_qual_input.txt")))) {
            // 示例:逐行读取文件内容
            String line;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

可选临时方案(不推荐)

如果暂时不想修改资源目录配置,编译后文件会保留在resources子目录下,此时读取路径需改为"/resources/coding_qual_input.txt"(仍需使用getResourceAsStream方式),但这种方式不符合Java项目资源管理规范,不建议长期使用。


内容的提问来源于stack exchange,提问作者Jonas Ohlendorf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:12:52