Java 文件读取 FileNotFoundException 但文件明明存在怎么解决? 📅 2026/7/2 10:31:21 Java 文件读取 FileNotFoundException 但文件明明存在怎么解决 本文整理Java 文件读取 FileNotFoundException 但文件明明存在怎么解决的排查思路与可运行示例适合课程设计、实验调试时查阅。问题分析文件资源管理器里能看到文件路径也复制对了但FileInputStream或FileReader仍抛出FileNotFoundException。这在 Java 课程设计和实验里很常见多数不是「文件不存在」而是程序查找文件的起点工作目录和你想的不一样。排查步骤1. 验证当前工作目录最常见Java 的new File(data.txt)从JVM 启动时的工作目录查找不是.java文件所在目录System.out.println(当前工作目录: System.getProperty(user.dir));IntelliJ IDEA 默认工作目录一般是项目根目录Eclipse 可能是项目根或bin。文件若在src/main/resources应使用类路径资源见示例代码。2. 检查路径与文件名- Windows 路径可用/或\\建议统一/- Linux/macOS大小写敏感Test.txt与test.txt不同- 中文文件名用getAbsolutePath()打印绝对路径到资源管理器核对3. 权限与锁定File file new File(path); System.out.println(存在: file.exists()); System.out.println(可读: file.canRead());Linux/macOS 注意读权限Windows 上文件若被其他程序独占打开也可能读失败。4. IDE 与构建缓存IDEAFile → Invalidate Caches。Maven 项目资源在src/main/resources构建后位于target/classes可用getClass().getResource()读取。5. 相对路径写错例如文件在桌面但工作目录是项目根相对路径应为../Desktop/test.txt而不是test.txt。先getAbsolutePath()确认程序实际在找哪里。示例代码以下代码演示排查过程Java 8import java.io.*; public class FileNotFoundDebug { public static void main(String[] args) { String fileName test.txt; System.out.println( 调试信息 ); System.out.println(工作目录: System.getProperty(user.dir)); File file new File(fileName); System.out.println(绝对路径: file.getAbsolutePath()); System.out.println(文件存在: file.exists()); System.out.println(可读: file.canRead()); System.out.println(是文件: file.isFile()); try (BufferedReader br new BufferedReader(new FileReader(file))) { System.out.println( 文件内容 ); String line; while ((line br.readLine()) ! null) { System.out.println(line); } } catch (FileNotFoundException e) { System.err.println(FileNotFoundException: e.getMessage()); } catch (IOException e) { e.printStackTrace(); } // 备选从类路径读取文件放在 src/main/resources/test.txt System.out.println(\n 类路径资源 ); java.net.URL resource FileNotFoundDebug.class.getResource(/test.txt); if (resource ! null) { System.out.println(资源路径: resource.getPath()); } else { System.out.println(类路径未找到 /test.txt请把 test.txt 放到 resources 目录); } } }运行说明1. 在项目根目录创建test.txt写入任意内容如Hello Java2. 编译运行javac FileNotFoundDebug.java java FileNotFoundDebug3. 若仍报FileNotFoundException对照输出的「工作目录」和「绝对路径」把文件放到程序实际查找的位置或改用绝对路径 / 类路径资源常见坑1.IDE 运行配置在Run → Edit Configurations中查看 Working directory必要时改为项目根目录2.Maven/Gradle资源文件放src/main/resources读取用getClass().getClassLoader().getResourceAsStream(test.txt)3.中文路径确保.java源文件保存为 UTF-84.快捷方式Java 不会解析.lnk必须指向真实文件路径5.临时目录Linux/tmp可能被清理测试文件勿放临时目录快速对照| 现象 | 优先检查 ||------|----------|| IDEA 能打开程序找不到 | 工作目录 vs 文件实际位置 || 相对路径失败绝对路径成功 | 相对路径基准目录写错 || 仅在某台电脑失败 | 大小写、中文路径、权限 |