gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:01:40 25 4
gpt4 key购买 nike

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

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

最佳答案

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

首先,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()

关于java - BufferedWriter:在文件关闭之前写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40477832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com