Java IO,这些资源会自动关闭吗?

标签 java file-io io stream

在这段代码中,我读取了一个文本文件,当 BufferedReader 被“try-resource” block 关闭时,InputStreamReader 也关闭了,那么我可以保证所有资源都像这样关闭吗?

try(final BufferedReader br = new BufferedReader(new InputStreamReader(new 
    FileInputStream(file), charset))) {
        String line = null;

        while((line = br.readLine()) != null) {
            builder.append(line);

        }

    }

在另一个例子中,我写了一个文本文件,按照上面写的,最后所有的资源都关闭了吗?是否必须调用flush()?

try(final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new 
    FileOutputStream(file), charset))) {
        bw.write(text);
        bw.flush();

    }

最佳答案

是的,最外层流会调用其内部流的 close() 方法,因此您只需调用最外层流即可。

您不需要调用flush(),流将在必要时和关闭之前刷新。删除它,代码就会看起来很完美。

关于Java IO,这些资源会自动关闭吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520965/

相关文章:

IDE 外部的 Java 应用程序未使用 Weka 类

java - Maven-打包jar时如何创建ejb客户端

java - 如何使用java根据日期按月分组并计算总数?

c++ - sprintf 生成的字符串的值顺序与 Ubuntu 服务器上传递的参数顺序不同

java - 为什么 write() 和 read() 似乎写入和读取超过一个字节?

ruby - 在 Ruby 中打印可编辑到控制台

java - 如果没有自动完成,如何手动注入(inject) Spring 注入(inject)

c - 当我打开文件时会发生什么(RAM 和 ROM 很重要)

amazon-web-services - 为什么Disk Read And write看起来很小,IO却99.99%

c# - 在目录 c# 中查找具有匹配模式的文件?