Как правило, close()
в самой внешней оболочке потока вызовет close()
в обернутых потоках.Однако, если вы считаете, что конструктор, скорее всего, сгенерирует исключение, используйте интерфейс Closeable .
FileReader fr = new FileReader(fileName);
Closeable res = fr;
try {
BufferedReader br = new BufferedReader(fr);
res = br;
} finally {
res.close();
}
Так что, даже если JVM исчерпала пространство кучи длябуфер и выдал ошибку, вы не пропустите дескриптор файла.
Для Java 7 и выше используйте try-with-resources:
try (FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr)) {
// do work
}