在使用IO写入流时遇到
java.io.IOException: Stream closed
这个异常。
最终在源码中的close()方法中找到了问题所在,源码如下:
public void close() throws IOException {
synchronized (lock) {
if (out == null) {
return;
}
try {
flushBuffer();
} finally {
out.close();
out = null;
cb = null;
}
}
}
用代码举例说明下:
FileOutputStream fout = new FileOutputStream("d:\\b.txt");
OutputStreamWriter out= new OutputStreamWriter(fout);
BufferedWriter bw = new BufferedWriter(out);
bw.write("hello world!");
BufferedWriter在执行close()时会调用flushBuffer()将数据从缓存写入硬盘,而flushBuffer()需要用到OutputStreamWriter。同样OutputStreamWriter在执行close()也会向上用到FileOutputStream。
所以按照输入流的关闭顺序来关闭写入流就会出现问题,写入流正确的关闭顺序应该是:
bw.close();
out.close();
fout.close();