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.

Другие вопросы по тегам