FileExotFoundException未被IOException捕获

时间:2017-09-01 10:02:01

标签: java exception filenotfoundexception ioexception

在我的程序中,我想读取一个文件,然后进行分析。为此,我制作了这个简单的代码:

BufferedReader br = null;
FileReader fr = null;
try {
  fr = new FileReader("E:\\Users\\myFile.txt");
  br = new BufferedReader(fr);

  [...]

} catch (IOException e) {
  e.printStackTrace();
} finally {
  try {

    if (br != null)
      br.close();
    if (fr != null)
      fr.close();

  } catch (IOException ex) {
    ex.printStackTrace();
  }
}

不幸的是,当我的文件不存在时,我会抛出一个java.io.FileNotFoundException异常。但是当我阅读java.io.FileNotFoundException的文档时,我可以看到java.io.IOExceptionjava.io.FileNotFoundException的超类。

那么,为什么java.io.FileNotFoundException没有抓住catch (IOException ex)

我也知道我必须catch (FileNotFoundExceptionex),但我不明白为什么会有这个错误。

1 个答案:

答案 0 :(得分:1)

确实

public void test() {
    BufferedReader br = null;
    FileReader fr = null;
    try {
        fr = new FileReader("E:\\Users\\myFile.txt");
        br = new BufferedReader(fr);
        System.out.println("OK");
    } catch (IOException e) {
        System.out.println("Caught in try.");
        e.printStackTrace();
    } finally {
        try {

            if (br != null)
                br.close();
            if (fr != null)
                fr.close();

        } catch (IOException ex) {
            System.out.println("Caught in catch.");
            ex.printStackTrace();
        }
    }
}

打印

  

抓住了尝试。

     

java.io.FileNotFoundException:E:\ Users \ myFile.txt(系统找不到指定的路径)...

BTW:您可以使用尝试使用资源来获得更加有效和整洁的解决方案。

public void test() {
    try (BufferedReader br = new BufferedReader(new FileReader("E:\\Users\\myFile.txt"))){
        System.out.println("OK");
    } catch (IOException e) {
        System.out.println("Caught in try.");
        e.printStackTrace();
    }
}