扫描程序不断抛出FileNotFoundException

时间:2013-11-14 09:08:50

标签: java java.util.scanner filenotfoundexception

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

我不明白。如果f.existstrue,则扫描程序如何抛出未找到文件的异常?

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

  

线程“main”中的异常java.lang.RuntimeException:Uncompilable   源代码 - 未报告的异常java.io.FileNotFoundException;必须   被抓或被宣布被投掷   scannertest.ScannerTest.main(ScannerTest.java:13)

第13行

Scanner s = new Scanner(f);

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

线索在错误消息中:

  

线程“main”中的异常java.lang.RuntimeException:Uncompilable   源代码 - 未报告的异常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 :(得分:1)

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

您在

中有“未处理的例外类型FileNotFoundException
new Scanner(f)

解决方案:

  1. 环绕try-catch
  2. main声明为throw FileNotFoundException

  3. //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();
    }
    

    OR

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