IntelliJ中Java项目资源文件存放与读取报错排查
解决类路径资源读取的FileNotFoundException问题
问题根源分析
你的代码报错主要有两个核心原因:
- IntelliJ资源目录配置错误:从返回的URL能看到,编译后文件被放在了
resources子目录下,说明你的resources文件夹未被标记为IntelliJ的「资源根目录」,导致编译工具没有将资源文件直接输出到类路径根目录。 - 读取方式不兼容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
相关产品推荐
相关产品推荐

