指定正确路径仍遇Java FileNotFoundException问题求助
Java FileNotFoundException 问题解决(文件与类同目录仍找不到)
问题描述
文件与Test类处于同一目录,但使用相对路径"aaa.txt"创建File对象时,始终触发FileNotFoundException,相关代码如下:
File myFile = new File("aaa.txt"); boolean isExisting = myFile.exists(); System.out.println(isExisting); try { FileReader f = new FileReader(myFile); BufferedReader bf = new BufferedReader(f); String line = bf.readLine(); while (line != null) { System.out.println(line); line = bf.readLine(); } bf.close(); } catch (FileNotFoundException e) { System.out.println("Can't find file"); // e.printStackTrace(); } catch (IOException e) { System.out.println("Error"); }
未捕获异常时的报错信息:
java.io.FileNotFoundException: aaa.txt (找不到指定文件) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:216) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) at java.base/java.io.FileReader.<init>(FileReader.java:75) at Testing/Packageeee.Test.main(Test.java:29)
核心原因
你误解了相对路径的基准:File类的相对路径是基于程序运行时的工作目录,不是类文件所在的包目录。
比如用IDE运行时,工作目录默认是项目根目录(和src文件夹同级),而你的aaa.txt放在Packageeee包目录下,程序会去项目根目录找这个文件,自然找不到。
可以通过以下代码验证当前工作目录:
System.out.println(System.getProperty("user.dir"));
解决方法
方法1:调整文件位置(最简单)
直接把aaa.txt移到项目根目录(和src文件夹同一层级),这样相对路径就能正确匹配。
方法2:用类加载器读取(推荐,适配打包场景)
如果要让文件和类文件放在一起,使用类加载器获取资源,这种方式无论IDE运行还是打包成JAR都能正常读取:
try { // 通过类加载器获取同目录下的文件输入流 InputStream is = Test.class.getResourceAsStream("aaa.txt"); BufferedReader bf = new BufferedReader(new InputStreamReader(is)); String line = bf.readLine(); while (line != null) { System.out.println(line); line = bf.readLine(); } bf.close(); } catch (FileNotFoundException e) { System.out.println("Can't find file"); } catch (IOException e) { System.out.println("Error"); }
方法3:使用绝对路径(不推荐,移植性差)
直接写死文件的绝对路径,比如:
File myFile = new File("C:/你的项目路径/Testing/Packageeee/aaa.txt");
这种方式换环境就需要修改路径,不建议使用。
内容的提问来源于stack exchange,提问作者Meme410
相关产品推荐
相关产品推荐

