我有观看目录的观看服务。创建文件后,我正在处理目录并更新树视图。
这在ENTRY_DELETE
上工作正常,但有时(并非总是)当WatchEvent
ENTRY_CREATE
出现时,该文件尚未写入磁盘。
我已经通过创建监视服务注册目录的new File()
以及文件路径并检查exists()
方法来确认这一点,因此操作系统似乎正在触发实际创建文件之前的create事件。
This question似乎是同一个问题,但是从文件夹的角度来看。
我可以解决这个问题吗?
答案 0 :(得分:9)
创建文件时会触发事件。在写入文件之前,需要先创建该文件。文件一旦完全写入就不会出现,一旦创建就会出现。
一旦你获得创作活动,你可以做的是:
rw
模式创建RandomAccessFile随机访问权限(以便读取和写入权限)简化示例:
File lockFile = new File( "file_to_lock" );
FileChannel channel = new RandomAccessFile( lockFile, "rw" ).getChannel( );
channel.lock( );
答案 1 :(得分:0)
我有同样的问题,在处理之前创建事件后我添加了几秒延迟。由于其他应用程序用于写入文件,因此过去需要几秒钟来刷新内容并释放文件。