JavaNioWatcher:如何检测长时间(复制)操作的结束?

JavaNioWatcher:如何检测长时间(复制)操作的结束?,java,nio,watchservice,Java,Nio,Watchservice,我需要对dir中新引入的文件执行一些ZIP操作。在这里,我为触发的CREATE事件进行subscribe。将操作复制到该目录需要一些时间 因此,在访问文件时,我被拒绝“被另一个进程锁定” NIO是否提供类似于“LOCK Released”的内容,或者我是否需要以某种方式轮询文件以释放锁?就像这里描述的:http://stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-comple

我需要对dir中新引入的文件执行一些ZIP操作。在这里,我为触发的CREATE事件进行subscribe。将操作复制到该目录需要一些时间

因此,在访问文件时,我被拒绝“被另一个进程锁定”

NIO是否提供类似于“LOCK Released”的内容,或者我是否需要以某种方式轮询文件以释放锁?就像这里描述的:http://stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-complete-in-java-1-6

谢谢你的帮助


Gerd

修改复制操作,以便在写入第一个较大文件后,将另一个小文件写入同一目录。文件名可以是原始文件的名称,加上扩展名

您的观察者将查找具有此扩展名的文件,将其切掉以获取原始文件名,然后启动Zip操作


另一种选择是,您的复制操作写入的文件扩展名不是您要查找的扩展名。完成后,它将重命名文件以提供正确的扩展名。

将文件复制到其他目录中;完成后,将其移动到监视的目录

java.nio.file.Files.move(srcFile, targetFile, StandardCopyOption.ATOMIC_MOVE);

观察者将看到一个创建事件

,感谢您的评论。我会检查的。但正如下面的评论所述,复制操作似乎不受我的影响。有时是FTP,有时是通过SMB/SAMBA。为了找到复制操作的结尾,我尝试监督使用:-file.isModified()-file.length()-file.isWrite()写入的文件。我对复制操作没有影响,但复制到监视的目录中。这只是发生在外面的某个地方。