Java缓冲写入程序

Java缓冲写入程序,java,bufferedwriter,Java,Bufferedwriter,如果在写入完成后不关闭缓冲写入器对象,会发生什么?我的意思是如果我们错过了bw.close()?如果你打开了很多文件,如果你不关闭它们,你的操作系统在一段时间后将无法打开更多的文件 此外,虽然您的BufferedWriter尚未被垃圾收集,但就您的操作系统而言,它写入的文件将保持打开状态。如果这是Windows,则在关闭文件句柄之前,您将无法删除该文件,BufferedWriter最终被垃圾收集,或者JVM退出 BufferedWriter.close()将缓冲区刷新到基础流,因此如果忘记fl

如果在写入完成后不关闭缓冲写入器对象,会发生什么?我的意思是如果我们错过了bw.close()?

如果你打开了很多文件,如果你不关闭它们,你的操作系统在一段时间后将无法打开更多的文件

此外,虽然您的
BufferedWriter
尚未被垃圾收集,但就您的操作系统而言,它写入的文件将保持打开状态。如果这是Windows,则在关闭文件句柄之前,您将无法删除该文件,
BufferedWriter
最终被垃圾收集,或者JVM退出

  • BufferedWriter.close()
    将缓冲区刷新到基础流,因此如果忘记
    flush()
    而不关闭,则文件可能没有写入的所有文本

  • BufferedWriter.close()
    也会关闭包装好的写入程序。当它是一个文件编写器时,这将最终关闭一个
    FileOutputStream
    ,并告诉操作系统您已经完成了对该文件的写入

  • 垃圾收集器将自动调用
    close()
    ,而不是在
    BufferedWriter
    或包装的FileWriter上,而是在
    fileoutstream
    上。因此,操作系统会很高兴,但您必须等待GC

  • 但是,您总是希望在不再需要操作系统资源时尽快释放它们。这适用于打开的文件、数据库连接、打印队列。。。任何东西在这件事上相信我

  • BufferedWriter.close()
    会清除内部字符缓冲区,这样即使
    BufferedWriter
    本身仍在作用域内,内存也可用于垃圾收集


检查更多详细信息

如果您打开了许多文件,如果不关闭它们,您的操作系统将在一段时间后无法打开更多文件

此外,虽然您的
BufferedWriter
尚未被垃圾收集,但就您的操作系统而言,它写入的文件将保持打开状态。如果这是Windows,则在关闭文件句柄之前,您将无法删除该文件,
BufferedWriter
最终被垃圾收集,或者JVM退出

  • BufferedWriter.close()
    将缓冲区刷新到基础流,因此如果忘记
    flush()
    而不关闭,则文件可能没有写入的所有文本

  • BufferedWriter.close()
    也会关闭包装好的写入程序。当它是一个文件编写器时,这将最终关闭一个
    FileOutputStream
    ,并告诉操作系统您已经完成了对该文件的写入

  • 垃圾收集器将自动调用
    close()
    ,而不是在
    BufferedWriter
    或包装的FileWriter上,而是在
    fileoutstream
    上。因此,操作系统会很高兴,但您必须等待GC

  • 但是,您总是希望在不再需要操作系统资源时尽快释放它们。这适用于打开的文件、数据库连接、打印队列。。。任何东西在这件事上相信我

  • BufferedWriter.close()
    会清除内部字符缓冲区,这样即使
    BufferedWriter
    本身仍在作用域内,内存也可用于垃圾收集

查看更多详细信息

File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);