gpt4 book ai didi

在写入文件之前触发 Java 7 监视服务 ENTRY_CREATE

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:17 24 4
gpt4 key购买 nike

我有一个监视目录的监视服务。创建文件后,我将处理目录并更新 TreeView 。

这在 ENTRY_DELETE 上工作正常,但有时(不总是)当 ENTRY_CREATEWatchEvent 发生时,文件尚未写入到磁盘。

我已经通过创建 watch 服务注册目录的 new File() 以及文件路径并检查 exists() 来确认这一点> 方法,因此操作系统似乎在实际创建文件之前触发了创建事件。

This question似乎是同一个问题,但从文件夹的角度来看。

有什么办法可以解决这个问题?

最佳答案

创建文件时触发该事件。该文件需要先创建,然后才能写入。文件不会在完全写入后出现,而是在创建后出现。

一旦获得创建事件,您可以做的是:

  • 创建 File对象指向文件
  • 创建 java.nio.channels.FileChannel使用 RandomAccessFile 进行随机访问使用rw 模式(因此读写访问)
  • Lock这个 channel 。这将阻塞,直到文件可以自由读取/写入访问(阅读更通用的 Lock 方法以获取更多信息)
  • 获得锁后,您的文件被写入文件的进程释放

一个简化的例子:

File lockFile = new File( "file_to_lock" );
FileChannel channel = new RandomAccessFile( lockFile, "rw" ).getChannel( );
channel.lock( );

关于在写入文件之前触发 Java 7 监视服务 ENTRY_CREATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34671792/

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