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