Java 7文档中的FileWriter 和 FileOutputStream 构造函数都会抛出异常,前者抛出IOException,后者抛出FileNotFoundException。
尽管如此,两种异常的原因是相同的。文档中说明,“如果文件存在但是是目录而不是常规文件、不存在但无法创建或由于任何其他原因无法打开”,则会抛出异常。
既然如此,为什么Java创作者会决定为FileOutputStream使用专门的异常,而为FileWriter使用通用的异常呢?
Java 7文档中的FileWriter 和 FileOutputStream 构造函数都会抛出异常,前者抛出IOException,后者抛出FileNotFoundException。
尽管如此,两种异常的原因是相同的。文档中说明,“如果文件存在但是是目录而不是常规文件、不存在但无法创建或由于任何其他原因无法打开”,则会抛出异常。
既然如此,为什么Java创作者会决定为FileOutputStream使用专门的异常,而为FileWriter使用通用的异常呢?
FileWriter
是 OutputStreamWriter
的子类,其构造函数会抛出 UnsupportedEncodingException
异常。FileWriter
的实现,可以发现它使用 FileOutputStream
,该类会抛出 FileNotFoundException
异常。由于 FileWriter
构造函数现在可能会抛出这两个异常中的任意一个,因此声明为抛出 IOException
,这是这两个异常的共同超类。(或者它也可以声明分别抛出这两个异常。)