Я просто хотел посмотреть, есть ли лучший способ, которым я должен справиться с этим. Мое понимание потоков заключается в том, что до тех пор, пока вы закрываете поток, любые потоки, инкапсулированные внутри него, будут закрыты, поэтому я окончательно закрываю TarArchiveOutputStream. Если я получаю FileNotFound на rawDir или archiveDir, я хочу его зарегистрировать, иначе все остальное, что я хочу бросить.Java, обработка исключений и закрытие потоков с помощью try, наконец
public static void createTarGzOfDirectory(File rawDir, File archiveFile) throws IOException {
FileOutputStream fOut = null;
BufferedOutputStream bOut = null;
GzipCompressorOutputStream gzOut = null;
TarArchiveOutputStream tOut = null;
try {
fOut = new FileOutputStream(archiveFile);
bOut = new BufferedOutputStream(fOut);
gzOut = new GzipCompressorOutputStream(bOut);
tOut = new TarArchiveOutputStream(gzOut);
addFileToTarGz(tOut, rawDir, "");
} catch (FileNotFoundException e) {
log.error("File not found: " + e);
} finally {
if(tOut != null) {
tOut.finish();
tOut.close();
}
}
Любые другие соображения или мысли по улучшению вещей?
Почему, на ваш взгляд, вы хотите назвать «закончить»? – bmargulies