1

我正在尝试将一个文件加载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:无法编译的源代码 - 未报告的异常 java.io.FileNotFoundException;必须在scannertest.ScannerTest.main(ScannerTest.java:13) 被捕获或声明被抛出

第 13 行是

Scanner s = new Scanner(f);

4

3 回答 3

5

线索在错误消息中:

线程“main”中的异常 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

于 2013-11-14T09:19:10.767 回答
5

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

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

于 2013-11-14T09:11:12.800 回答
1

没有收到找不到文件的异常,您收到有关Uncompilable source code的错误,因为您没有处理异常

您在以下位置有“未处理的异常类型FileNotFoundException ”:

new Scanner(f)

解决方案:

  1. 环绕try-catch.
  2. 声明mainthrow 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 {
于 2013-11-14T09:11:10.580 回答