在写入文件之前触发了Java 7 Watch Service ENTRY_CREATE

我有一个观看目录的观看服务。 创建文件后,我正在处理目录并更新树视图。

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

我已经通过创建一个new File()来监视监视服务注册的目录以及文件的路径并检查exists()方法,所以似乎操作系统在文件之前触发了创建事件实际上是创造了。

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

我可以用任何方式解决这个问题吗?

创建文件时会触发该事件。 在写入文件之前,需要先创建该文件。 文件一旦完全写入就不会出现,一旦创建就会出现。

一旦你获得了创作活动,你能做的就是:

  • 创建一个File对象以指向该文件
  • 使用带有rw模式的RandomAccessFile创建一个java.nio.channels.FileChannel用于随机访问(所以读写访问)
  • 锁定频道。 这将阻塞,直到文件可以进行读/写访问(有关更多信息,请阅读更常用的Lock方法)
  • 获取锁定后,文件由写入文件的进程释放

一个简化的例子:

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

我遇到了同样的问题,在处理之前创建事件后,我添加了几秒延迟。 由于其他应用程序用于写入文件,它过去需要几秒钟来刷新内容并释放文件。