JAVA: IO Exception: причина потока закрыта
Почему я получаю следующее исключение? Что я делаю, так это пишу гигантский ArrayList построчно в файл на диске. Сгенерированный файл составляет около>700 МБ. Кажется, что это имеет некоторые проблемы при написании построчно. Может ли размер файла быть причиной? Почему поток закрыт? Кстати, я работаю на ОС Windows.
FileWriter evaluated_result =
new FileWriter(path_output+this.algorithm+"/"+query_type+"/"+"queries.eval");
BufferedWriter out = new BufferedWriter(evaluated_result);
out.write(Myobject);
out.newLine();
evaluated_result.close();
out.close();
Исключением является следующее:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:45)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:118)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.BufferedWriter.close(BufferedWriter.java:264)
at Assignment_1.Query_Evaluator.write100BestDocumentsEvalFormat(Query_Evaluator.java:85)
at Assignment_1.Experiment.ConductExperiment(Experiment.java:54)
at Assignment_1.Main.main(Main.java:78)
1 ответ
Вы должны закрыть BufferedWriter
перед закрытием FileWriter
,
И завершающие вызовы должны быть в блоке finally. Это один из способов сделать это (с одним, наконец):
FileWriter evaluated_result = new FileWriter(path_output+this.algorithm+"/"+query_type+"/"+"queries.eval");
BufferedWriter out = new BufferedWriter(evaluated_result);
try {
out.write(Myobject);
out.newLine();
}
finally {
if (out != null) out.close();
if (evaluated_result != null) evaluated_result.close();
}
(Смотрите здесь для большего количества вариантов)
Также обратите внимание, что, как уже упоминалось @oldrinb, вам не нужно закрывать вложенные потоки. Но я думаю, что в любом случае это хорошая практика.
В Java 7 вы можете использовать оператор try-with-resources.