почему я должен закрывать FileOutputStream в разделе finally в try-catch-finally?
Вы можете поставить close()
в конце всех блоков операций записи / чтения, но если что-то пойдет не так (чтение / запись), вы достигнете блока обработки исключений и ни один поток не будет закрыт , Если вы решите поместить close()
в блок обработки исключений, и все будет хорошо, угадайте, что? ... поток не будет закрыт. Таким образом, вы можете сделать это в обоих блоках кода, но таким образом код будет менее читабельным. Таким образом, размещение его в блоке finally гарантирует, что в любом случае он будет закрыт.
Во-вторых, вы должны закрыть только последний поток, который был связан. так что если у вас есть это.
fos = new FileOutputStream(filename);
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(fos, "UTF-8")));
Вам нужно всего лишь
out.close();
Это закроет другие потоки, связанные с исходящим потоком.
Часть UTF-8 зависит от типа кодировки данных, которую вы пытаетесь прочитать, если вы кодируете UTF-8, декодируете UTF-8.