关于Java输入输出流关闭的问题。。。

在学java时老师一直强调要用完流要关闭流,但有一个问题我一直没清楚,就是装饰流该怎么个关闭,通常我们是这样关闭的:
...
FileWriter fw = new FileWriter(fileName);
BufferedWriter bw = new BufferedWriter(fw);
...
fw.close();
bw.close();
...
但我感觉太累赘,既然fw被bw装饰了,bw关闭的同时是否fw也被关闭呢?
或者fw被关闭了的话,bw是否同时也被关闭,毕竟它们用的是一个流通道。

假如fw,bw都需要被关闭的话,它们关闭的顺序有要求吗?就是关闭的先后
顺序改变会有影响吗。

我还见到一只情况,如果bw是这样创建的:
...
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
...
这样我们就取不到fw了,怎么办?

3个回答

  • 如果流是被嵌套起来的话,只需要关闭最外层的流就可以了,被修饰的流会自动关闭
  • 在你给的第一个例子中,只要调用bw.close()就可以了,第二个例子调用bw.close()
  • 可以看一下这个链接 http://www.javapractices.com/topic/TopicAction.do?Id=8
guagua22
_guagua2222_ 实在不放心,就跳到包装流的close方法内去瞅瞅就放心了。
2 年多之前 回复
JustForPerfect
JustForPerfect 谢谢,其实我一开始就这么理解的,但很多别人的例子都是全部关闭,就把我迷惑了。。。
大约 5 年之前 回复

换一种创建方法呗,不直接new

第一种写法,流是要一个一个关闭的,且是要按顺序的!
第二种写法,只需关闭最外层的流!
简单点说,只要创建了流的实例,都要关闭!

guagua22
_guagua2222_ 看源码中的close方法就知道了,包装流会把内部依赖的节点流关掉的,不需要你去关注包装流内部的节点流的问题。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐