4

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

2 回答 2

8

关闭链式流时,只需要关闭最外层的流即可。任何错误都将向上传播并被捕获。

看看这里。可能这个问题以前被问过。

于 2011-07-05T18:02:41.760 回答
3

始终使用块关闭资源finally

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

您在这里唯一的资源是FileOutputStream,所以它是唯一真正需要关闭的资源。如果PrintWriter构造函数要抛出,你真的应该释放FileOutputStream无论如何,这排除了关闭PrintWriter.

请注意,您确实想要flush . PrintWriter这只需要在非异常情况下完成,因此不需要finally。

于 2011-07-05T18:39:18.357 回答