2015-12-04 4 views
1

У меня есть файл, который постоянно записывается, пока он зарегистрирован в watchService. Можно ли обнаружить, что оно завершено, используя WatchEvent.Обнаружение завершения файла с помощью WatchService в java

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

+0

вы можете использовать тайм-аут (скажем, 1 сек), как долго не было получено новое событие модификации, и чем предполагается, что процесс записи завершен. Это может помочь: https://docs.oracle.com/javase/8/docs/api/java/nio/file/WatchService.html#poll-long-java.util.concurrent.TimeUnit- –

ответ

0

Я столкнулся с такой же проблемой на ладони Windows. Я попытался решить его с помощью таймаута: когда истечет 1 секунда, например, прошло (с момента последнего изменения), я считаю, что файл завершен. Но он не работает для больших файлов: я отмечаю, что после истечения времени ожидания запускается событие изменения. В моем приложении я копирую файлы в каталог. Я решил проблему, скопировав временный файл после копии моего файла. В этом случае, когда событие создания запускается для временного файла, первый файл завершен.

N.B: для платформы linux я выполнил поиск, и я нахожу предложение использовать метод renameTo(), чтобы проверить, заблокирован ли файл процессом. Если remaneTo() возвращает true, ваш файл будет завершен. В моем проекте, зависящем от Windows, я попробовал renameTo(), но получаю истинное значение, и файл не завершен.