BufferedWriter:在关闭之前写入文件

BufferedWriter: Write to file before it is closed

所以在我的程序中我有一个 BufferedWriter 用于创建程序正在执行的日志文件。

private BufferedWriter logWriter;
logWriter = new BufferedWriter(new FileWriter(logFile));

在几个 类 的几个不同时间,我调用以下方法继续添加到日志文件中:

public void log(String logTXT)
{
    try
    {
        logWriter.write(logTXT + "\n");
    } catch(Exception e)
    {
        e.printStackTrace();
    }
}

一切正常,但它所做的一件事是,在我调用 logWriter.close(); 之前,它实际上并没有写入文件。

我希望看到的是在调用该方法后立即将字符串添加到文件中。无论如何我可以解决这个问题,还是我只能忍受这个,考虑到这不是什么大问题。

BufferedWriter有一个缓冲区,所以它不会在缓冲区满之前写入磁盘(除非你调用了flush或close方法)

您可以使用 PrintWriter。

让我尝试通过详细说明来解释您的查询以及如何解决您的问题。

首先BufferWriter开始将所有数据存储在它自己的缓冲区(基于内存分配),一旦缓冲区已满,它就会开始写入,然后再次返回到缓冲区已满.

这非常重要,因为 IO 操作的成本太高,因此为了提高效率,这种缓冲技术应运而生。

但是,如果您想在文件中记录下来,而不管缓冲区是否已满,可以使用一种方法 flush() 来解决您的问题。

现在让我们考虑一下您的情况:当您调用 close() 方法时,它会在内部调用 flush() 方法,然后进一步关闭该缓冲区。这就是为什么您可以在关闭它时看到变化。

总而言之,在写入所有内容后调用 logWriter.flush(); 即可完成(如果您希望 BufferedReader 在特定时间写入)。

通过使用所有这些,您可以创建自己的自定义方法,该方法可以立即编写。

public void writeInstantText(BufferedWriter logWriter, String logTXT ){
  try
    {
        logWriter.write(logTXT + "\n");
        logWriter.flush();
    } catch(Exception e)
    {
        e.printStackTrace();
    }
}

或者在 write() 方法之后添加 logWriter.flush()