使用jpathwatch查找程序何时完成写入文件

时间:2010-08-30 20:36:08

标签: java monitoring

我目前正在使用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) {
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在jpathwatch的常见问题解答中,作者说在编写文件时会定期收到ENTRY_MODIFY事件,并且在文件写入完成时将停止生成该事件。他建议您为每个文件保留一个文件列表和上次生成事件的时间戳。

在某个时间间隔(他称之为超时),您将浏览文件列表及其时间戳。如果任何文件的时间戳早于超时间隔,那么这应该意味着它不再被更新并且可能已完成。

他甚至建议您尝试确定文件的增长率,并计算出应该完成的时间,以便将轮询时间设置为预期的完成持续时间。

根本没有清除它吗?对不起,我不能在代码中表达:)