为什么FileWriter和FileOutputStream有不同的异常?

4

Java 7文档中的FileWriterFileOutputStream 构造函数都会抛出异常,前者抛出IOException,后者抛出FileNotFoundException。

尽管如此,两种异常的原因是相同的。文档中说明,“如果文件存在但是是目录而不是常规文件、不存在但无法创建或由于任何其他原因无法打开”,则会抛出异常。

既然如此,为什么Java创作者会决定为FileOutputStream使用专门的异常,而为FileWriter使用通用的异常呢?

1个回答

4
  1. FileWriterOutputStreamWriter 的子类,其构造函数会抛出 UnsupportedEncodingException 异常。
  2. 如果查看 FileWriter 的实现,可以发现它使用 FileOutputStream,该类会抛出 FileNotFoundException 异常。

由于 FileWriter 构造函数现在可能会抛出这两个异常中的任意一个,因此声明为抛出 IOException,这是这两个异常的共同超类。(或者它也可以声明分别抛出这两个异常。)


FileReader继承自InputStreamReader(其构造函数可能会抛出UnsupportedCharsetException异常),但是FileReader构造函数仅会抛出FileNotFoundException异常(FileReader构造函数会调用FileInputStream构造函数,该构造函数仅会抛出FileNotFoundException异常)。 - Code Complete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接