我正在尝试使用Java 7和WatchService监视何时将文件夹添加到文件夹(通过从其他位置复制),然后我想对新创建的文件夹中的文件执行操作。
在OSX上它按预期工作,在文件夹及其内容被复制之前,我没有收到新文件夹创建的通知。但是在Windows上,我在文件夹的内容被复制之前收到了关于文件夹创建的关键事件,所以当我尝试处理文件夹中的文件时,通常只有第一个文件存在。
我目前的解决方法是在收到文件夹通知后,我睡了10秒等待文件内的文件复制过来,但这不是很令人满意,因为文件夹的大小可能会有很大差异因此我会睡得不够长或大部分时间太长。
为什么OSX和Windows之间的区别,以及如何在Windows上解决我的问题?
答案 0 :(得分:0)
WatchService旨在在某种程度上依赖于平台。来自Java 7 API documentation:
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.
考虑以下两种情况。
如果您回复创建文件夹内容而不是文件夹本身,则会涵盖这两种情况。您还可以消除睡眠中固有的竞争条件。