运行Java类读取同目录txt文件提示FileNotFoundException报错如何解决
Java读取同目录txt文件抛出FileNotFoundException解决方案
报错信息:Exception in thread "main" java.io.FileNotFoundException: Employees.txt (No such file or directory)
核心原因
直接传入文件名构造文件对象时,Java默认从进程启动的工作目录查找文件,工作目录和class文件所在目录没有必然关联,哪怕txt和class放在同一个文件夹,只要进程工作目录不是这个文件夹,就会报找不到文件的错误。
快速解决方法
- 方法1:确认当前工作目录,把文件放到对应路径
在读取文件的代码前加入下面的代码,打印进程当前的工作目录:System.out.println(System.getProperty("user.dir"));
把Employees.txt放到输出的路径下,就能直接用文件名读取文件。 - 方法2:从class同目录加载资源(推荐,兼容性更强)
如果需要固定读取和class同目录下的文件,不要使用FileAPI直接读取,改用类加载器加载classpath下的资源:
// 把示例中的类名替换为你当前运行的类的类名 InputStream stream = 当前运行类名.class.getResourceAsStream("Employees.txt"); if (stream == null) { throw new IllegalArgumentException("class同目录下不存在Employees.txt文件"); } // 后续读取内容示例 BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); String line; while ((line = reader.readLine()) != null) { // 自行处理每行内容 } reader.close();
常见场景说明
- 如果使用IDE(IDEA、Eclipse等)运行项目,默认工作目录是项目根目录,不是class输出的bin、target/classes等目录,建议把txt文件放到项目的资源目录(Maven项目为
src/main/resources,普通Java项目放到src目录下),IDE编译时会自动把资源文件复制到class输出目录,配合方法2的写法不会出现找不到文件的问题。 - 项目打包成jar包运行时,
FileAPI无法直接读取jar包内部的资源文件,用类加载器的写法可以正常读取。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

