没有在Java程序中处理FileNotFoundException文件吗? [重复]

问题描述 投票:-1回答:1

我在Mac系统的Java程序中查找文件时遇到一些麻烦。

import java.io.File;
import java.util.Scanner;
import java.net.MalformedURLException;
import java.net.URL;
public class Data{
    public static void main(String[] args){
        File file = new File("/Users/tianrongzhen/project/test.txt");

        Scanner sc = new Scanner(file);

        while(sc.hasNextLine()){
            System.out.println(sc.nextLine());
        }
    }
}

在同一目录中,当我键入此命令Javac Data.java时,会出现此错误

我已经在StackOverflow上阅读了多个类似的帖子,但不幸的是,我找不到解决方案。

Data.java:9: error: unreported exception FileNotFoundException; must be caught or declared to be thrown Scanner sc = new Scanner(file);
                         ^
1 error

我尝试设置文件路径,如:


    "./test.txt"
    "test.txt"
    "/text.txt"

但是,仍然会发生相同的错误。

我不知道这是否相关,但是我只能在〜目录中的终端中运行java命令,并且上述所有Java文件也都在〜目录中。

有人有什么建议吗?

java exception compiler-errors java-io filenotfoundexception
1个回答
1
投票

您的代码未引发异常。您的错误消息并不意味着抛出FileNotFoundException

您有编译时错误。

无论何时打开文件,它都必须像这样:

try {
    File file = new File("/Users/tianrongzhen/project/test.txt");
} catch (Exception e) { 
    // handle exception here
}

或类似这样:

public static void main(String[] args) throws FileNotFoundException {
    File file = new File("/Users/tianrongzhen/project/test.txt");
    // rest of your code
}

有两种例外:已检查和未检查。

经检查的异常可以认为是编译器发现的异常,并且编译器知道该异常有可能发生,因此您需要捕获或抛出该异常。

例如,打开文件。它有机会失败,并且编译器知道这一点,因此您不得不捕获或抛出可能的IOExceptionFileNotFoundException

以上两种处理异常的方式之间存在巨大差异。

第一个在内部捕获并处理Exception,因此调用方不必进行任何异常处理。

第二个抛出Exception,因此呼叫者需要处理Exception

根据您在此处提出的问题,建议您阅读有关异常处理的基础知识。 Here是一种资源,但随时可以探索。

© www.soinside.com 2019 - 2024. All rights reserved.