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

Java/IntelliJ中同目录文件触发FileNotFoundException的问题咨询

关于Java文件路径与IntelliJ运行目录的问题解答

核心原因:当前工作目录不匹配

你遇到的问题本质是Java程序运行时的「当前工作目录」和你预期的不一致:

  • IntelliJ默认把项目根目录设为运行时的工作目录,而不是你的Main类所在的目录。当你用./input.txt时,Java会去项目根目录找这个文件,但你的input.txt其实在src目录下(和Main类同目录),所以自然找不到,触发FileNotFoundException。
  • 用src/input.txt能成功,是因为这个路径是相对于项目根目录的,刚好对应文件的实际位置,但这只在IntelliJ的默认配置下有效。

解决办法(从根本上避免环境差异问题)

1. 用类加载器读取资源文件(推荐)

不管是在IntelliJ里运行,还是打包成Jar在其他环境运行,只要文件和类在同一个类路径下,都能通过类加载器读取:

// 读取和Main类同目录的input.txt
InputStream inputStream = Main.class.getResourceAsStream("input.txt");
// 如果文件放在resources子目录,路径写成"resources/input.txt"

这种方式的本质是从类路径中查找资源,不受当前工作目录的影响,是Java读取资源文件的标准做法。

2. 临时调整IntelliJ的工作目录(仅适合开发调试)

如果你只想在IntelliJ里用./input.txt读取文件,可以修改运行配置:

  • 打开「Run/Debug Configurations」,找到你的Main类运行配置
  • 在「Working directory」选项中,改为Main类所在的目录(比如$MODULE_DIR$/src)
  • 注意:这种方式只在IntelliJ环境生效,打包后还是会出问题。

3. 遵循标准项目结构

规范的Java项目会把资源文件放在src/main/resources目录下,编译打包时这个目录的文件会自动被放到类路径中,用类加载器就能直接读取,也避免了和Java类文件混放的问题。

为什么非IntelliJ环境用src/input.txt会失败

在非IntelliJ环境(比如直接用javac编译、java命令运行),你的工作目录通常是编译后class文件所在的目录,这时候src目录要么不存在,要么不在当前工作路径的范围内,所以src/input.txt这个路径就失效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:07