IntelliJ Java项目无法读取与类同目录下my_address.txt文件求助
问题根因
你使用new File(相对路径)方式读取文件时,Java的相对路径基准是JVM启动时的工作目录,而非.class类文件的存放目录。如果在IDEA、Eclipse等IDE中运行项目,默认工作目录是项目根文件夹,不是类所在的包目录,因此放在类同级目录下的txt文件无法被识别。
你可以先运行以下代码确认当前工作目录,确认后直接把txt放到输出的路径下即可快速验证:
System.out.println("当前工作目录:" + new File(".").getAbsolutePath());
可行解决方案
方案1:使用类加载器读取类路径资源(最推荐,适配类同级目录的存放方式)
因为你把my_address.txt放在和AddressBook类同级的目录下,属于Java类路径的覆盖范围,可以修改readFile方法中文件读取的逻辑,用类加载器读取资源:
public void readFile(String filename) { Scanner fileReader; try { // 从当前类的类路径下读取同目录文件 InputStream inputStream = AddressBook.class.getResourceAsStream(filename); if (inputStream == null) { throw new FileNotFoundException(filename + " could not be found! Exiting.."); } fileReader = new Scanner(inputStream); // 原有业务逻辑保持不变 while(fileReader.hasNextLine()) { String[] data = fileReader.nextLine().trim().split(","); String firstName = data[0]; String lastName = data[1]; String address = data[2]; String phone = data[3]; people.add(new Person(firstName, lastName, address, phone)); } fileReader.close(); } catch(FileNotFoundException fnfe){ System.out.println(fnfe.getMessage()); System.exit(0); } }
方案2:调整文件存放位置
如果不想修改代码,直接把my_address.txt放到上面打印出的工作目录(项目根目录)下即可正常读取。
方案3:使用绝对路径读取(不推荐,移植性差)
直接写文件的完整绝对路径,比如String FILENAME = "C:/project/Animal/my_address.txt",但换环境运行时需要同步修改路径。
补充规范
如果使用Maven、Gradle等构建工具,建议把非代码资源文件统一放到src/main/resources目录下,构建时会自动打包到类路径中,配合类加载器读取的方式通用性更强。
内容的提问来源于stack exchange,提问作者Ceecode
相关产品推荐
相关产品推荐

