[英]my Java program doesn't write anything in my .csv file, even though there is no "file not found" error
我的代码是:
FileWriter writer = new FileWriter("fisiere/audit.csv", true);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime now = LocalDateTime.now();
writer.append(dtf.format(now));
writer.append(",");
writer.append("insereazaTabelCandidatiLinie");
writer.append(",");
writer.append(Thread.currentThread().getName());
writer.append("\n");
我想打开 .csv 文件并在其中写入被调用方法的名称以及调用的时间和日期,此代码在 main 中工作,并在文件中写入我需要的内容,但是当我在我的方法中使用相同的代码时它什么也没写。 该方法被调用,我在执行上面的行之前通过在屏幕上打印一条短消息来检查,该消息已显示在屏幕上。
数据可能不会在附加到 FileWriter 后立即写入磁盘。 一个原因是写入磁盘可能是一个相对缓慢/昂贵的操作。 为了解决这个问题,传入的数据可能会被写入内存中的缓冲区,并在稍后通过调用“flush”或“close”手动“刷新”到磁盘,或者如果内存缓冲区变满。 确保在程序结束时刷新数据的最简单方法是使用“try-with-resources”块来确定 FileWriter 的生命周期。
public static void main(String[] args) throws Exception
{
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
try(FileWriter writer = new FileWriter("fisiere/audit.csv", true))
{
writer.append(dtf.format(now));
writer.append(",");
writer.append("insereazaTabelCandidatiLinie");
writer.append(",");
writer.append(Thread.currentThread().getName());
writer.append("\n");
}
}
这将自动调用“close”,这将导致在 try 块完成时刷新数据。
编辑 - 高级别何时刷新
何时刷新数据在很大程度上取决于上下文。 通常,最大写入频率应该是每次将完整消息写入缓冲区时。 例如:在上面,不要在新行之前调用flush,因为这可能导致文件阅读器看到不完整的数据(线程名称可能丢失)。
根据预期的写入吞吐量,最大频率可能会比期望的更有效地使用系统资源。 在这种情况下,可能首选在刷新之前在内存中批处理消息或等待刷新之间的某个时间间隔。
请注意文件更准确地反映进程的实时状态与进程完成的更多工作之间的权衡。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.