使用资源试用时是否需要调用 flush()

2022-09-01 09:46:18

会隐式呼叫吗?try-with-resourcesflush()

如果是这样,在下面的代码片段中,是否可以安全地删除?bw.flush()

static void printToFile1(String text, File file) {
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
        bw.write(text);
        bw.flush();
    } catch (IOException ex) {
        // handle ex
    }
}

我在官方文件中没有看到任何关于它的描述:

https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html


答案 1

可关闭自动关闭是通用接口,对刷新一无所知。因此,您无法在他们的文档中找到有关它的任何信息 - 除了一些关于释放资源的文字。

另一方面,Writer 是一个更具体用途的抽象类,它现在知道一些关于冲洗的知识。Writer.close() 方法的文档摘录:

关闭流,首先刷新它

所以-是的-使用作家时,遗嘱也总是.这基本上意味着,在尝试找出关闭的真正作用时,您必须查阅正在使用的具体类的文档。closeflush


答案 2

使用资源试用块时,将自动关闭资源。作为此过程的一部分,它还将自动调用 flush。

如 Doc 中所述,BufferedWriter 的关闭方法:

关闭流,首先刷新它。关闭流后,进一步的 write() 或 flush() 调用将导致抛出 IOException。


推荐