FileNotFoundException与NoSuchFileException

我注意到另一个Javaexception表明该文件不存在 – NoSuchFileException 。 我的任务是重构一个api,它从不同的方法抛出这两个,我只想使用一个。

我应该将NoSuchFileException映射到FileNotFoundException吗? 我应该使用NoSuchFileException而不是FileNotFoudnException因为它更具体吗?

编辑:更新了问题。 我在发布此问题之前阅读了文档并了解了基本的区别。 我希望在这种情况下获得更多信息和指导,因为类型的exception处理对于服务api的客户端很重要,我想避免在需要对两种exception类型进行检查时的情况。

FileNotFoundExceptionexception

尝试打开由指定路径名表示的文件的信号失败。 当具有指定路径名的文件不存在时, FileInputStreamFileOutputStreamRandomAccessFile构造函数将抛出此exception。 如果文件确实存在但由于某种原因无法访问 ,例如当尝试打开只读文件进行写入时,这些构造函数也会抛出它

NoSuchFileException

尝试访问不存在的文件时抛出的已检查exception。

文档是不言自明的。

NoSuchFileException不同, FileNotFoundException并不一定意味着该文件不存在,它可能只是不可访问。 除此之外,我不确定你的不同之处。

恕我直言,这两个例外的语义有一个细微差别。 NoSuchFileException通常在预期位置没有File时使用,而FileNotFoundException也用于这种情况,但是在文件存在但无法访问的情况下也是如此。 (许可问题等……)

此外,请注意NoSuchFileException是在Java 7中引入的,因此对于您的特定任务,我会坚持使用FileNoteFoundException因为它更通用并且与Java 1.6兼容

NoSuchFileException扩展了IOException的新(1.7) FileSystemException子类,而FileNotFoundExceptionIOException的直接子类。 作为一个新的父类, FileSystemException应尽可能完整,因此尽管出现冗余,但添加了NoSuchFileExceptionNotDirectoryExceptionAccessDeniedException子类很好地NotDirectoryException了早期的function,而不是将几种可能性留在一个无法区分的丛中。