Java 8+Eclipse Oxygen中无法通过相对/绝对路径读取文件求助
解决Java读取txt文件时的FileNotFoundException问题
我之前也踩过一模一样的坑,结合你的情况,给你几个实用的排查和解决办法:
1. 先确认文件的真实位置
你通过代码输出的当前目录是E:\eclipse-java-oxygen-R-win32\HashMap,先手动打开这个文件夹检查——你的txt文件是不是真的放在这里?很多人会下意识把文件丢到项目的src目录下,但程序的工作目录是项目根目录,这时候相对路径就不对了:如果文件在src里,你得写成src/yourfile.txt(Windows下用\\也可以,但Java更推荐/,兼容性更好)。
2. 用类路径读取更靠谱(推荐)
如果你的txt文件是项目的资源文件,以后还要打包成Jar的话,别用File类读,改用Class.getResourceAsStream(),这是Java读取资源文件的标准方式:
// 假设你的txt文件在src根目录下,用/开头表示类路径根 InputStream inputStream = YourMainClass.class.getResourceAsStream("/yourfile.txt"); if (inputStream == null) { throw new FileNotFoundException("找不到指定的txt文件,请检查路径是否正确"); } // 用BufferedReader读取内容 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); inputStream.close();
Eclipse会自动把src下的非Java文件复制到编译后的classes目录,这样不管是在IDE里运行还是打包成Jar,都能正确找到文件。
3. 检查Eclipse的运行工作目录
有时候Eclipse的运行配置会被修改,导致工作目录不是你预期的项目根目录:
- 右键你的Java类 → Run As → Run Configurations
- 切换到Arguments标签页
- 查看Working directory部分,默认应该是
${workspace_loc:/HashMap}(也就是你的项目根目录),如果不是,改回这个默认值就行。
4. 绝对路径要注意转义
如果你坚持用绝对路径,Windows系统里的\需要转义成\\,或者直接用/代替:
// 转义反斜杠的写法 File file = new File("E:\\eclipse-java-oxygen-R-win32\\HashMap\\yourfile.txt"); // 用正斜杠的写法(推荐,Java会自动处理) File file = new File("E:/eclipse-java-oxygen-R-win32/HashMap/yourfile.txt");
排查小技巧
你可以在代码里打印出程序实际查找的文件路径,方便对比排查:
File testFile = new File("yourfile.txt"); System.out.println("程序实际查找的路径:" + testFile.getAbsolutePath());
看看输出的路径和你放文件的路径是不是一致,不一致的话调整路径就好。
内容的提问来源于stack exchange,提问作者I Like
相关产品推荐
相关产品推荐

