You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:27:01