Java 当我正在读取的文件存在时,程序会给我 FileNotFoundException,但如果我处理异常,则可以正常工作

Java program gives me FileNotFoundException when the file I am reading from exists but then works perfectly fine if I handle the exception

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

public class WordJumble {

    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub
        File file = new File("F:/Files/Topic.txt");
        Scanner sc = new Scanner(file); 

        String title = sc.nextLine();
        System.out.println(title);
        for(int i=0;i<10;i++){
            System.out.println(sc.nextLine());
        }
    }
}

目前程序正在做我想要的,但为什么它给我一个关于文件不存在的错误?当我添加 throws 子句以忽略错误时,它能够毫无问题地找到文件。

虽然错误的措辞可能有点令人困惑,但错误本身并不是 FileNotFoundException,而是抱怨您没有处理 可能性 抛出这样的异常。您的编译器只告诉您,您需要处理文件不在您认为的位置的可能性。因此,当您将 throws FileNotFoundException 添加到方法签名时,编译器会满意并且您的错误消失了。

当您说 'add the statement to ignore the error' 时,您的意思是将 'throws...' 子句添加到 main 的定义中,以便它可以干净地编译。对吗?

如果找不到文件,Scanner 许多人会抛出 FileNotFoundException。必须在某处处理(捕获)此异常。

相反,您选择不处理,并表示它可以从 main.

传播出去

执行此操作的适当方法是使用 try - catch 结构。

try {
   Scanner sc = new Scanner(file);
   :
   :
catch (FileNotFoundException ex) {
   ... print an error or something ...
}

使用这种方法使得错误处理成为代码的主要流程'out of line'。