我们如何关闭嵌套流?关闭所有这些?如果是的话,订单是什么?
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?
答案 0 :(得分:8)
关闭链接流时,只需关闭最外层的流。任何错误都会在链中传播并被捕获。
看看here。可能之前已经问过这个问题。
答案 1 :(得分:3)
始终使用finally
块关闭资源:
acquire();
try {
use();
} finally {
release();
}
这里唯一的资源是FileOutputStream
,因此它是唯一真正需要关闭的资源。如果要抛出PrintWriter
构造函数,那么你真的应该释放FileOutputStream
,这就排除了关闭PrintWriter
。
注意,您确实希望 flush
PrintWriter
。这只需要在非例外情况下完成,因此不需要最终。