Используйте jpathwatch, чтобы узнать, когда программа закончила запись в файл - PullRequest
1 голос
/ 31 августа 2010

В настоящее время я использую 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 Ответ

1 голос
/ 31 августа 2010

В FAQ для jpathwatch автор говорит, что вы будете регулярно получать событие ENTRY_MODIFY, когда файл записывается, и это событие перестает генерироваться, когда запись файла завершена. Он предлагает вам сохранить список файлов и отметку времени для последнего сгенерированного события для каждого файла.

Через некоторый интервал (который он называет тайм-аутом) вы просматриваете список файлов и их временные метки. Если у какого-либо файла есть отметка времени, которая старше вашего интервала ожидания, это должно означать, что он больше не обновляется и, вероятно, завершен.

Он даже предлагает вам попытаться определить скорость роста файла и рассчитать, когда он должен завершиться, чтобы вы могли установить время опроса на ожидаемую продолжительность завершения.

Это все проясняет? Извините, я не могу выразить это в коде:)

...