5

可能重复:
PrintWriter 和 PrintStream 从不抛出 IOExceptions

也许这个问题有点“奇怪”。但我很想知道为什么PrintWriterPrintStream都不会自动检查运行时异常,它们提供了一个 checkError() 方法。

提前感谢大家。

4

2 回答 2

4

对于经常写入标准输出或错误的 PrintStream,这些流可能已被关闭或丢弃,但您不希望程序因此而意外失败。

PrintWriter 在很多方面都是 PrintStream 的 Writer 版本,尽管我不确定重复 PrintStream 的错误是否是个好主意。;)

PrintWriter 不报告 IOException 的事实使其成为将文本写入您经常需要知道连接失败的 Socket 的糟糕选择。

于 2012-09-14T20:50:12.433 回答
0

我认为这主要是因为 System.err 是一个 PrintStream。

当您在 catch 块中处理异常时,调用 e.printStackTrace() 很常见,它会写入 System.err。如果该调用引发异常,您将丢失原始异常并从您的代码中获取 PrintStream 错误。然后你需要在你的 catch 块中额外的 try/catch 来防止这个问题,这会造成很大的混乱。

请注意,JDK 1.7 解决了从 catch 块中抛出异常的问题,并允许您访问这两个异常。

于 2012-09-14T21:05:25.547 回答