我目前正在使用jpathwatch来监视在文件夹中创建的新文件。一切都很好,但我需要找出程序何时完成写入文件。
图书馆的作者在他的网站(http://jpathwatch.wordpress.com/faq/)上描述了这是怎么做的,但不知怎的,我不知道如何做到这一点。也许它的描述有点不清楚,或者我只是不明白。
我想问你是否可以给我一个片段来演示如何做到这一点。
这是基本构造:
public void run() {
while (true) {
WatchKey signalledKey;
try {
signalledKey = watchService.take();
} catch (InterruptedException ix) {
continue;
} catch (ClosedWatchServiceException cwse) {
break;
}
List<WatchEvent<?>> list = signalledKey.pollEvents();
signalledKey.reset();
for (WatchEvent<?> e : list) {
if (e.kind() == StandardWatchEventKind.ENTRY_CREATE) {
Path context = (Path) e.context();
String filename = context.toString();
// do something
} else if (e.kind() == StandardWatchEventKind.ENTRY_DELETE) {
Path context = (Path) e.context();
String filename = context.toString();
// do something
} else if (e.kind() == StandardWatchEventKind.OVERFLOW) {
}
}
}
}
答案 0 :(得分:1)
在jpathwatch的常见问题解答中,作者说在编写文件时会定期收到ENTRY_MODIFY事件,并且在文件写入完成时将停止生成该事件。他建议您为每个文件保留一个文件列表和上次生成事件的时间戳。
在某个时间间隔(他称之为超时),您将浏览文件列表及其时间戳。如果任何文件的时间戳早于超时间隔,那么这应该意味着它不再被更新并且可能已完成。
他甚至建议您尝试确定文件的增长率,并计算出应该完成的时间,以便将轮询时间设置为预期的完成持续时间。
根本没有清除它吗?对不起,我不能在代码中表达:)