FindBugs是正确的:如果FileWriter的构造函数引发异常,则不会关闭文件阅读器。要验证这一点,请尝试为传递无效的文件名
output。
我将按照以下步骤进行操作:
FileReader fileReader = new FileReader(input); try { FileWriter fileWriter = new FileWriter(output); try { // may throw something sourceXmlToBeautifiedXml(fileReader, fileWriter); } finally { fileWriter.close(); } } finally { fileReader.close(); }请注意,关闭时抛出的异常的处理可能会得到改善,因为通过抛出异常离开finally-block将导致try语句通过抛出该异常而终止,吞噬try-
block中抛出的任何异常,这通常是对调试更有用。有关如何避免这种情况的简单方法,请参见duffymo的答案。
编辑 :从Java 7开始,我们可以使用try-with-resources语句,该语句允许对这些极端情况进行正确和简洁的处理:
try ( FileReader fileReader = new FileReader(input); FileWriter fileWriter = new FileWriter(output)) { // may throw something sourceXmlToBeautifiedXml(fileReader, fileWriter);}


