Автоматическое управление ресурсами поставляется в Java 7, которая автоматически обеспечит обработку этого. До этого такие объекты, как OutputStream
, InputStream
и другие, реализуют интерфейс Closeable
начиная с Java 5. Я предлагаю вам предоставить служебный метод для их безопасного закрытия. Эти методы обычно используют исключения, поэтому убедитесь, что вы используете их только тогда, когда хотите игнорировать исключения (например, в методе finally). Например:
public class IOUtils {
public static void safeClose(Closeable c) {
try {
if (c != null)
c.close();
} catch (IOException e) {
}
}
}
Обратите внимание, что метод close()
можно вызывать несколько раз, если он уже закрыт, последующие вызовы не будут иметь никакого эффекта, поэтому также предоставьте вызов для закрытия во время нормальной работы блока try, где исключение не будет проигнорировано , Из документации Closeable.close :
Если поток уже закрыт, то вызов этого метода не имеет никакого эффекта
Так что закройте выходной поток в обычном потоке кода, и метод safeClose
выполнит закрытие, только если в блоке try произошел сбой:
FileOutputStream out = null;
try {
out = new FileOutputStream("myfile.txt");
//...
out.close();
out = null;
} finally {
IOUtils.safeClose(out);
}