所以在我的程序中,我有一个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();
之前,它实际上并没有写入文件。
我想看到的是在调用方法后立即将字符串添加到文件中。无论如何我可以解决这个问题,或者我只是不得不忍受这个问题,因为这不是一个大问题。
答案 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。