在我的程序中,我想读取一个文件,然后进行分析。为此,我制作了这个简单的代码:
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.IOException
是java.io.FileNotFoundException
的超类。
那么,为什么java.io.FileNotFoundException
没有抓住catch (IOException ex)
?
我也知道我必须catch (FileNotFoundExceptionex)
,但我不明白为什么会有这个错误。
答案 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();
}
}