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 с использованием исключения приведет к завершению оператора try путем выброса этого исключения, проглотив любое исключение, выброшенное в блоке try, как правило, было бы более полезно для отладки. Смотрите ответ Даффимо, чтобы узнать, как этого избежать.
Редактировать : Начиная с Java 7, мы можем использовать инструкцию try-with-resources, которая разрешает правильную и краткую обработку следующих угловых случаев:
try (
FileReader fileReader = new FileReader(input);
FileWriter fileWriter = new FileWriter(output)
) {
// may throw something
sourceXmlToBeautifiedXml(fileReader, fileWriter);
}