在窗口上的Java WatchService在复制内容之前,请告知文件夹创建文件夹



我正在尝试使用java 7,然后手表服务在何时将文件夹添加到文件夹中(通过从其他位置复制),然后我想在该文件夹中行动新创建的文件夹。

在OSX上,它正如我期望的那样,在复制该文件夹及其内容之前,我不会收到新文件夹创建的通知。但是在Windows上,我在复制文件夹的内容之前在文件夹创建中收到关键事件,因此当我尝试处理文件夹中的文件时,通常只有第一个文件。

我目前的解决方法是在收到文件夹通知之后,我睡了10秒钟才能等待复制的文件,但这不是很令人满意,因为文件夹的大小可能会有很大的变化,所以我会睡得不够长的时间或大部分时间太长。

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

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.

考虑以下两种情况。

  • 单个复制操作比睡眠时间更长。
  • 多个复制操作到同一文件夹中。

如果您响应文件夹内容而不是文件夹本身的创建,则涵盖了这两种情况。您还可以消除睡眠中固有的种族条件。

相关内容

  • 没有找到相关文章

最新更新