在写入文件之前触发了Java 7 Watch Service ENTRY_CREATE
我有一个观看目录的观看服务。 创建文件后,我正在处理目录并更新树视图。
这在ENTRY_DELETE
上工作正常,但有时(并非总是)当发生WatchEvent
的ENTRY_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( );
我遇到了同样的问题,在处理之前创建事件后,我添加了几秒延迟。 由于其他应用程序用于写入文件,它过去需要几秒钟来刷新内容并释放文件。