关于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了,怎么办?

  • 如果流是被嵌套起来的话,只需要关闭最外层的流就可以了,被修饰的流会自动关闭
  • 在你给的第一个例子中,只要调用bw.close()就可以了,第二个例子调用bw.close()
  • 可以看一下这个链接 http://www.javapractices.com/topic/TopicAction.do?Id=8

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

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