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

Java报错FileNotFoundException:文件存在却无法找到的问题求助

解决Java找不到同一包下txt文件的问题

看起来你踩了Java文件路径的常见坑——FileReader的相对路径不是基于你的类所在的包,而是基于程序运行时的当前工作目录!哪怕你的prices_usd.txt和DollarToEur.java在同一个包里,只要运行时工作目录不对,就会触发FileNotFoundException。

下面给你几个靠谱的解决方案,按推荐程度排序:

1. 从类路径读取资源(最推荐,适配所有场景)

因为你的文件和类在同一包下,属于类资源,用类加载器读取是最稳妥的方式——不管是在IDE里运行,还是打包成Jar文件,都能正常找到文件。修改后的代码如下:

import java.io.*;

public class DollarToEur {
    public static void main(String[] args) throws IOException {
        // 用当前类的类加载器获取同一包下的文件流
        try (InputStream inputStream = DollarToEur.class.getResourceAsStream("prices_usd.txt");
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
             BufferedWriter writer = new BufferedWriter(new FileWriter("converted_prices_eur.txt"))) {

            String line;
            // 这里可以根据实际汇率调整
            final double USD_TO_EUR_RATE = 0.92;

            while ((line = reader.readLine()) != null) {
                try {
                    double usdPrice = Double.parseDouble(line.trim());
                    double eurPrice = usdPrice * USD_TO_EUR_RATE;
                    // 保留两位小数写入新文件
                    writer.write(String.format("%.2f", eurPrice));
                    writer.newLine();
                } catch (NumberFormatException e) {
                    System.err.println("跳过无效的价格行: " + line);
                }
            }
            System.out.println("转换完成!已生成 converted_prices_eur.txt");
        } catch (NullPointerException e) {
            System.err.println("错误:找不到 prices_usd.txt,请确认文件和 DollarToEur 类在同一包下");
        }
    }
}

为什么这个方法好用?

  • 用try-with-resources语法自动关闭流,不用手动写close(),避免资源泄漏
  • 类加载器会自动从类路径(包括Jar包内部)查找资源,打包后也能正常工作
  • 增加了异常捕获,能帮你快速定位无效的价格行或文件缺失问题

2. 调整文件到当前工作目录(适合快速测试)

如果你只是想快速跑通代码,可以把prices_usd.txt放到程序的当前工作目录里:

  • 在IDE(比如IntelliJ/Eclipse)中,当前工作目录一般是你的项目根目录(比如your-project/),把文件移到这里,原来的FileReader("prices_usd.txt")就能正常工作了
  • 如果你用命令行运行,就把文件放到你执行java命令的那个文件夹里

3. 使用绝对路径(不推荐,移植性差)

你可以直接写文件的完整绝对路径,比如:

FileReader fr = new FileReader("C:/your-project/src/com/your-package/prices_usd.txt");

但这种方法的问题是,换一台电脑或修改项目路径后,代码就失效了,只适合临时测试用。

内容的提问来源于stack exchange,提问作者Wesley van Straalen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:36