【问题标题】:closing nested streams [duplicate]关闭嵌套流[重复]
【发布时间】:2011-09-29 00:50:24
【问题描述】:
可能重复:
Best way to close nested streams in Java?
我们如何关闭嵌套流?全部关闭?如果是,顺序是什么?
FileOutputStream out = new FileOutputStream("data.txt", true);
PrintWriter pout = new PrintWriter(out);
/* do some I/O */
pout.close();
out.close();
或关闭最外面的流将关闭所有流。
pout.close(); // Is this enough?
【问题讨论】:
标签:
java
inputstream
printwriter
【解决方案1】:
关闭链式流时,只需要关闭最外层的流即可。任何错误都会向上传播并被捕获。
看看here。可能以前有人问过这个问题。
【解决方案2】:
始终使用finally 块关闭资源:
acquire();
try {
use();
} finally {
release();
}
您在这里唯一的资源是FileOutputStream,所以它是唯一真正需要关闭的资源。如果要抛出 PrintWriter 构造函数,你真的应该释放 FileOutputStream,这样就不会关闭 PrintWriter。
注意,您确实想要flush PrintWriter。这只需要在非异常情况下完成,因此不需要finally。