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()
。
所以在我的程序中我有一个 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()
。