FileNotFoundException与NoSuchFileException
我注意到另一个Javaexception表明该文件不存在 – NoSuchFileException
。 我的任务是重构一个api,它从不同的方法抛出这两个,我只想使用一个。
我应该将NoSuchFileException
映射到FileNotFoundException
吗? 我应该使用NoSuchFileException
而不是FileNotFoudnException
因为它更具体吗?
编辑:更新了问题。 我在发布此问题之前阅读了文档并了解了基本的区别。 我希望在这种情况下获得更多信息和指导,因为类型的exception处理对于服务api的客户端很重要,我想避免在需要对两种exception类型进行检查时的情况。
FileNotFoundExceptionexception
尝试打开由指定路径名表示的文件的信号失败。 当具有指定路径名的文件不存在时,
FileInputStream
,FileOutputStream
和RandomAccessFile
构造函数将抛出此exception。 如果文件确实存在但由于某种原因无法访问 ,例如当尝试打开只读文件进行写入时,这些构造函数也会抛出它 。
NoSuchFileException
尝试访问不存在的文件时抛出的已检查exception。
文档是不言自明的。
与NoSuchFileException
不同, FileNotFoundException
并不一定意味着该文件不存在,它可能只是不可访问。 除此之外,我不确定你的不同之处。
恕我直言,这两个例外的语义有一个细微差别。 NoSuchFileException
通常在预期位置没有File时使用,而FileNotFoundException
也用于这种情况,但是在文件存在但无法访问的情况下也是如此。 (许可问题等……)
此外,请注意NoSuchFileException
是在Java 7中引入的,因此对于您的特定任务,我会坚持使用FileNoteFoundException
因为它更通用并且与Java 1.6兼容
NoSuchFileException
扩展了IOException
的新(1.7) FileSystemException
子类,而FileNotFoundException
是IOException
的直接子类。 作为一个新的父类, FileSystemException
应尽可能完整,因此尽管出现冗余,但添加了NoSuchFileException
。 NotDirectoryException
和AccessDeniedException
子类很好地NotDirectoryException
了早期的function,而不是将几种可能性留在一个无法区分的丛中。