【问题标题】:Scanner keeps throwing FileNotFound Exception [duplicate]扫描仪不断抛出 FileNotFound 异常 [重复]
【发布时间】:2013-11-14 09:08:50
【问题描述】:

我正在尝试将一个名为 SPY.txt 的文件加载到一个数组中,但我什至无法让这个小 sn-p 工作。

我不明白。如果f.existstrue,那么Scanner怎么会抛出一个文件未找到异常呢?

import java.io.*;
import java.util.Scanner;

public class ScannerTest {
    public static void main(String[] args) {
        File f = new File (new File("SPY.txt").getAbsolutePath());
        System.out.println(f.exists());
        Scanner s = new Scanner(f);
    }
}

输出:True

线程“主”java.lang.RuntimeException 中的异常:无法编译 源代码 - 未报告的异常 java.io.FileNotFoundException;必须 被抓住或被宣布被扔 scannertest.ScannerTest.main(ScannerTest.java:13)

第 13 行是

Scanner s = new Scanner(f);

【问题讨论】:

  • 你是怎么编译这个的?

标签: java java.util.scanner filenotfoundexception


【解决方案1】:

提示在错误信息中:

线程“主”java.lang.RuntimeException 中的异常:无法编译 源代码 - 未报告的异常 java.io.FileNotFoundException; 必须被抓到或被声明扔到scannertest.ScannerTest.main(ScannerTest.java:13)

意思是Scanner的构造函数抛出了异常,所以你需要把它放在try/catch块中,像这样:

import java.io.*;
import java.util.Scanner;

public class ScannerTest {
    public static void main(String[] args) {
        //try block starts here
        try {  
            File f = new File (new File("SPY.txt").getAbsolutePath());
            System.out.println(f.exists());
            Scanner s = new Scanner(f);
        } 
        //catch the exception
        catch(FileNotFoundException e) {
            e.printStackTrace();   
        }

    }
}

查看文档 herehere

【讨论】:

  • 哇。谢谢你。我原来的程序有一个尝试/终于。我想我必须阅读一下尝试。非常感谢您的帮助。
【解决方案2】:

FileNotFoundException 是该特定 Scanner 构造函数抛出的已检查异常。要么使用 throws 子句声明它,要么在其中放置一个 try-catch 块。

这与文件是否存在无关,而与Java中的异常处理有关。

【讨论】:

    【解决方案3】:

    没有收到找不到文件的异常,您收到有关无法编译的源代码的错误,因为您没有处理异常.

    你有“未处理的异常类型FileNotFoundException”在:

    new Scanner(f)
    

    解决方案:

    1. try-catch包围。
    2. main 声明为throw FileNotFoundException

    //1
    try {
        File f = new File (new File("SPY.txt").getAbsolutePath());
        System.out.println(f.exists());
        Scanner s = new Scanner(f);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    

    //2
    public static void main(String[] args) throws FileNotFoundException {
    

    【讨论】:

    • 他一点也不例外。他得到一个编译错误。
    • 您修改后的答案中的代码仍然无用,因为s 不在try 块之外,并且应该斜体的单词不是“异常”而是“处理”。
    • @EJP 我只是在演示应该做什么,而不是提供您所看到的完整代码。
    • 我明白了,但是 OP 呢?如果您提供代码,它应该很有用。人们会不假思索地剪切和粘贴它。
    • @EJP 既然我解释了,写实际代码只是为了演示,OP在运行程序之前需要改变一些小东西。对我来说最重要的是概念。但是,我改变了它:)
    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2023-04-07
    • 2016-09-10
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2017-09-04
    • 2016-11-30
    相关资源
    最近更新 更多