14

考虑如下 BufferedReader:

writer = new BufferedWriter(new FileWriter(new File("File.txt"), true));

在这种情况下,在应用程序结束时,我将关闭writerwithwriter.close()

这够了吗?new FileWriter(new File("File.txt"), true)不需要关闭创建的 FileWriter吗?

4

4 回答 4

18

没有必要关闭它,因为 BufferedWriter 负责关闭它包装的写入器。

为了说服你,这是 BufferedWriter 的 close 方法的源代码:

public void close() throws IOException {
    synchronized (lock) {
        if (out == null) {
            return;
        }
        try {
            flushBuffer();
        } finally {
            out.close();
            out = null;
            cb = null;
        }
    }
}
于 2013-05-16T10:24:56.447 回答
3

Yeswriter.close()也会关闭底层的 writers/streams。

于 2013-05-16T10:24:28.147 回答
3

最好单独关闭每个打开的流,因为它们都是单独的流。如果嵌套流发生错误,则流不会关闭。所以最好只关闭每个嵌套流。

有关更多详细信息,请参阅以下链接:

在 Java 中关闭嵌套流和编写器的正确方法

于 2013-05-16T10:26:18.830 回答
0

您只需要关闭最外层的流。其余的流是临时的,将自动关闭。如果您分别创建流然后嵌套它们,在这种情况下,您需要关闭单个流。检查这个问题也正确的方法来关闭Java中的嵌套流和编写器

于 2013-05-16T10:26:46.817 回答