Windows上的Java WatchService在复制内容之前通知文件夹的创build

我试图使用Java 7和WatchService来监视何时将文件夹添加到文件夹(通过从不同的位置复制),然后我想要对新创build的文件夹中的文件进行操作。

在OSX上,它正常工作,我没有收到新的文件夹创build通知,直到该文件夹​​及其内容已被复制。 但是,在Windows上,我收到文件夹创build之前的关键事件,因为当我尝试处理文件夹中的文件时,通常只有第一个文件在那里。

我目前的解决方法是收到文件夹通知我睡了10秒,等待文件内复制,但这不是很令人满意,因为文件夹的大小可以有很大的不同,所以我要睡觉不够长或太长大多数时候。

为什么OSX和Windows之间的区别,以及如何解决我在Windows上的问题?

Solutions Collecting From Web of "Windows上的Java WatchService在复制内容之前通知文件夹的创build"

WatchService旨在取决于平台。 从Java 7 API文档 :

The implementation that observes events from the file system is intended to map directly on to the native file event notification facility where available, or to use a primitive mechanism, such as polling, when a native facility is not available. Consequently, many of the details on how events are detected, their timeliness, and whether their ordering is preserved are highly implementation specific. 

考虑以下两种情况。

  • 一次复制操作需要比睡眠时间更长的时间。
  • 将多个复制操作放入同一个文件夹。

如果您对创建文件夹内容而不是文件夹本身做出响应,则可以涵盖这两种情况。 你也可以消除睡眠中固有的竞争条件。