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

Scanner构造抛出FileNotFoundException的排查与解决求助

解决Java中确认文件存在仍抛出FileNotFoundException的问题

核心原因:读取文件时用错了路径

你提到的“双重判断”大概率是在遍历目录时对找到的目标文件做了校验,但读取时却重新创建了一个仅含文件名的File对象——而这个新对象指向的并不是你找到的那个文件(比如文件在子目录里,你却在程序当前工作目录下查找它)。

简单解决方案

1. 直接用遍历到的File对象读取

遍历目录时,找到Tabelle.csv后直接使用这个现成的File对象创建Scanner,不要手动拼接路径:

import java.io.File;
import java.util.Scanner;

public class ReadCsv {
    public static void main(String[] args) throws FileNotFoundException {
        // 指定要遍历的根目录,比如这里是当前目录下的data文件夹
        File rootDir = new File("./data");
        traverseDir(rootDir);
    }

    public static void traverseDir(File dir) throws FileNotFoundException {
        if (!dir.isDirectory()) {
            return;
        }
        // 获取目录下的所有文件和子目录
        File[] files = dir.listFiles();
        if (files == null) {
            return;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                // 递归遍历子目录
                traverseDir(file);
            } else {
                // 匹配目标文件名
                if ("Tabelle.csv".equals(file.getName())) {
                    // 直接用找到的file对象创建Scanner
                    Scanner scanner = new Scanner(file);
                    // 读取并打印内容
                    while (scanner.hasNextLine()) {
                        System.out.println(scanner.nextLine());
                    }
                    scanner.close();
                }
            }
        }
    }
}

2. 避免try-catch的方法

Java要求IO操作必须处理异常,如果你不想写try-catch块,可以在方法签名上添加throws FileNotFoundException,让异常向上抛给JVM处理(程序会打印异常信息后终止),上面的代码已经采用了这种方式。

3. 排查其他潜在问题

  • 权限不足:文件存在但你没有读取权限。Windows右键文件→属性→安全,检查当前用户的读取权限;Linux/macOS用ls -l 文件路径查看权限位是否包含r。
  • 文件被占用:文件可能被其他程序(比如Excel)锁定,关闭占用程序后重试。

内容的提问来源于stack exchange,提问作者Kralkaz -.-

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:40:02