关闭嵌套流

时间:2011-07-05 18:00:45

标签: java inputstream printwriter

  

可能重复:
  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?

2 个答案:

答案 0 :(得分:8)

关闭链接流时,只需关闭最外层的流。任何错误都会在链中传播并被捕获。

看看here。可能之前已经问过这个问题。

答案 1 :(得分:3)

始终使用finally块关闭资源:

acquire();
try {
    use();
} finally {
    release();
}

这里唯一的资源是FileOutputStream,因此它是唯一真正需要关闭的资源。如果要抛出PrintWriter构造函数,那么你真的应该释放FileOutputStream,这就排除了关闭PrintWriter

注意,您确实希望 flush PrintWriter。这只需要在非例外情​​况下完成,因此不需要最终。