FileInputStream没有抛出文件记录的FileNotFoundException?

时间:2015-02-11 09:21:36

标签: java java-io

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状态。是什么给了什么?

1 个答案:

答案 0 :(得分:-1)

<强> PEBKAC

所以是的,这件事发生了: "this file totally doesnt exist" file exists

我对FileOutputStream进行了相同的测试,它必须创建文件 - 这就是为什么这个测试实际找到了文件的原因。反过来,FileOutputStream不会为不存在的文件抛出异常,因此测试毫无意义。我好尴尬。谢谢大家。