JAVA NIO Watcher:如何检测持久(复制)操作的结束?

时间:2013-01-17 19:29:41

标签: java nio watchservice

我需要在dir中对新引入的文件进行一些ZIP动作。我在那里获得了CREATE事件,该事件被触发。对该目录的复制操作需要一些时间。

所以我在访问文件时得到了“被另一个进程锁定”的ACCESS_DENIED。

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

感谢您的帮助。

格尔德

2 个答案:

答案 0 :(得分:1)

将文件复制到不同的目录中;完成后,将其移至监视目录。

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

观察者将看到一个CREATE事件

答案 1 :(得分:0)

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

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

另一种选择可能是您的复制操作会写入扩展名不同于您查找的扩展名的文件。完成后,它会重命名文件以为其提供正确的扩展名。