BufferedWriter:在文件关闭之前写入文件

时间:2016-11-08 02:07:26

标签: java file java-io bufferedwriter

所以在我的程序中,我有一个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();之前,它实际上并没有写入文件。

我想看到的是在调用方法后立即将字符串添加到文件中。无论如何我可以解决这个问题,或者我只是不得不忍受这个问题,因为这不是一个大问题。

2 个答案:

答案 0 :(得分:3)

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

首先,BufferWriter开始将所有数据存储在自己的缓冲区(基于内存分配),一旦缓冲区已满,就开始在其中写入,然后再次返回使缓冲区满。< / p>

这非常重要,因为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();
    }
}

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

答案 1 :(得分:1)

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

您可以使用PrintWriter。

相关问题