我正在尝试使用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.
考虑以下两种情况。
- 单个复制操作比睡眠时间更长。
- 多个复制操作到同一文件夹中。
如果您响应文件夹内容而不是文件夹本身的创建,则涵盖了这两种情况。您还可以消除睡眠中固有的种族条件。