FileNotFoundException与NoSuchFileException

时间:2014-12-11 13:40:08

标签: java exception exception-handling io

我注意到另一个Java异常用于指示该文件不存在 - NoSuchFileException。我的任务是重构一个api,它从不同的方法抛出这两个,我只想使用一个。

我应该将NoSuchFileException映射到文件FileNotFoundException吗?我应该使用NoSuchFileException代替FileNotFoudnException,因为它更具体吗?

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

4 个答案:

答案 0 :(得分:7)

FileNotFoundException

  

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

NoSuchFileException

  

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

文档不言自明。

答案 1 :(得分:4)

NoSuchFileException不同,FileNotFoundException并不一定意味着文件不存在,它可能只是无法访问。除此之外,我不确定你的情况如何。

答案 2 :(得分:3)

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

此外,请注意{7}中引入了FileNoteFoundException,因此对于您的特定任务,我会坚持使用{{1}},因为它更通用且与Java 1.6兼容< / p>

答案 3 :(得分:0)

NoSuchFileException扩展了FileSystemException IOException的新FileNotFoundException子类,而IOExceptionFileSystemException的直接子类。作为新的父类,NoSuchFileException应尽可能完整,因此尽管出现冗余,但NotDirectoryException已添加。 AccessDeniedExceptionWebSecurity.IsAuthenticated子类很好地充实了早期的功能,而不是将几种可能性留在一个无法区分的丛中。