gpt4 book ai didi

java - 在 Java 中,监视追加文件的最佳/最安全模式是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:07 26 4
gpt4 key购买 nike

其他人的流程正在创建 CSV 文件,方法是在事件发生时一次向其追加一行。我无法控制文件格式或其他进程,但我知道它只会追加。

在 Java 程序中,我想监视这个文件,当追加一行时读取新行并根据内容使用react。暂时忽略 CSV 解析问题。监视文件更改并一次读取一行的最佳方法是什么?

理想情况下,这将使用标准库类。该文件很可能位于网络驱动器上,所以我想要一些坚固耐用的东西。如果可能,我宁愿不使用轮询 - 我更喜欢某种阻塞解决方案。

编辑——假定阻塞解决方案无法通过标准类实现(感谢您的回答),那么最可靠的轮询解决方案是什么?我不想每次都重新读取整个文件,因为它可能会变得非常大。

最佳答案

从 Java 7 开始就有了 newWatchService() FileSystem class 上的方法.

但是,有一些注意事项:

  • 它只是 Java 7
  • 这是一个可选的方法
  • 它只监视目录,所以你必须自己处理文件,并担心文件移动等

在 Java 7 之前,标准 API 是不可能的。

我尝试了以下方法(以 1 秒的间隔进行轮询)并且它有效(仅在处理中打印):

  private static void monitorFile(File file) throws IOException {
final int POLL_INTERVAL = 1000;
FileReader reader = new FileReader(file);
BufferedReader buffered = new BufferedReader(reader);
try {
while(true) {
String line = buffered.readLine();
if(line == null) {
// end of file, start polling
Thread.sleep(POLL_INTERVAL);
} else {
System.out.println(line);
}
}
} catch(InterruptedException ex) {
ex.printStackTrace();
}
}

由于没有其他人建议使用当前生产 Java 的解决方案,我想我应该添加它。如有不妥之处欢迎补充。

关于java - 在 Java 中,监视追加文件的最佳/最安全模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073274/

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