FileInputStream(String name)
类的构造函数java.io.FileInputStream
声明它抛出FileNotFoundException
,并在其javadoc中声明:
如果指定的文件不存在,是一个目录而不是一个常规文件,或者由于某些其他原因无法打开进行阅读,则会抛出
FileNotFoundException
。
但是,使用不存在的文件名称调用它并不会导致抛出任何异常:
@Test(expected = FileNotFoundException.class)
public void nonExistentFileThrowsFileNotFoundException() throws FileNotFoundException {
new FileInputStream("this file totally doesnt exist");
}
此测试失败 - 不会抛出任何异常。查看构造函数的代码,很明显不应该抛出任何异常 - 它只是调用java.io.File
构造函数:
public FileInputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null);
}
这是设计/文档缺陷吗?在我看来,FileInputStream
构造函数既不应该声明throws FileNotFoundException
,也不应该声明它抛出的javadoc状态。是什么给了什么?
答案 0 :(得分:-1)
<强> PEBKAC 强>
所以是的,这件事发生了:
我对FileOutputStream
进行了相同的测试,它必须创建文件 - 这就是为什么这个测试实际找到了文件的原因。反过来,FileOutputStream
不会为不存在的文件抛出异常,因此测试毫无意义。我好尴尬。谢谢大家。