Bob*_*Bob 2 java io file filewriter bufferedwriter
为什么我会收到以下异常?我正在做的是将一个巨大的ArrayList逐行写入磁盘上的文件.生成的文件大约> 700MB.在逐行编写时似乎有些问题.文件的大小可能是一个原因吗?为什么流关闭了?顺便说一下,我正在开发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();
Run Code Online (Sandbox Code Playgroud)
例外情况如下:
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)
Run Code Online (Sandbox Code Playgroud)
你应该关闭BufferedWriter 之前关闭FileWriter.
并且,结束调用应该在最后一个块中.这是一种方法(最后一个):
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();
}
Run Code Online (Sandbox Code Playgroud)
(点击这里查看更多选项)
另请注意,正如@oldrinb所提到的,您不必关闭嵌套流.但我认为无论如何这都是好习惯.
使用Java 7,您可以使用try-with-resources语句.