Как указано в заголовке, следует ли закрывать поток при повторном использовании переменной FileOutputStream? Например, в следующих кодах я должен позвонить outfile.close()
, прежде чем назначить ему новый файл и почему?Должен ли я закрывать поток при повторном использовании FileOutputStream?
Спасибо :)
FileOutputStream outfile = null;
int index = 1;
while (true) {
// check whether we should create a new file
boolean createNewFile = shouldCreateNewFile();
//write to a new file if pattern is identified
if (createNewFile) {
/* Should I close the outfile each time I create a new file?
if (outfile != null) {
outfile.close();
}
*/
outfile = new FileOutputStream(String.valueOf(index++) + ".txt");
}
if (outfile != null) {
outfile.write(getNewFileContent());
}
if (shouldEnd()) {
break;
}
}
try {
if (outfile != null) {
outfile.close();
}
} catch (IOException e) {
System.err.println("Something wrong happens...");
}
* «прежде чем я присвоить ему новый файл» * - Да, вы можете оставить изменения в буфере, а это означает, что они не могут быть сохранены в файл. Вы потребляете дескрипторы файлов, которые ограничены ресурсами в ОС. Вы занимаете ресурсы в своей JVM. Вы должны всегда приводить в порядок после себя.Взгляните на [Заявление о попытках с ресурсами] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) для лучшего решения для обработки закрываемых ресурсов – MadProgrammer