Мне нужно отслеживать определенную папку для новых файлов, которые мне нужно обработать. У меня следующие требования:Папка монитора Java для файлов
- Имена файлов являются порядковыми номерами. Мне нужно обработать каждый файл по порядку. (Наименьшее число во-первых, нет гарантии, что каждый порядковый номер существует. Например: 1,2,5,8,9
- Если файлы уже существуют в папке во время запуска, мне необходимо обработать их напрямую
- Мне нужно гарантия того, что я только обрабатывать каждый файл один раз
- мне нужно, чтобы избежать чтения неполных файлов (которые все еще скопированные)
- служба должна быть надежной конечно ...
что является наиболее распространенным способом выполнить это?
Я использую Java SE7 и Spring 4.
Я уже смотрел WatchService Java 7, но, похоже, у него проблемы с обработкой уже существующих файлов во время запуска и избежать обработки неполных файлов.
https://docs.oracle.com/javase/tutorial/essential/io/notification.html - И вам нужно будет выполнить свою собственную персистенцию или какой-либо вид, чтобы распознать уже обработанные файлы. Либо переместите их в другой каталог, либо поместите имя файла в базу данных и проверите против него, и т. Д. – SnakeDoc
Учебник, о котором вы говорите, относится к WatchService, упомянутому в моем вопросе. Как вы справитесь с «неполными файлами», событие «создать» будет запущено до того, как файл будет завершен. Также как вы решаете проблему с чтением файлов, которые уже присутствуют в папке, во время запуска приложения? –
Что касается неполной проблемы с файлом, вам необходимо координировать работу с приложением, которое копирует/записывает файл.Общий способ - получить на нем FileLock, предполагая, что приложение для записи хорошо себя ведет, а используемая ОС поддерживает блокировку файлов. В противном случае у вас может быть приложение для записи сначала записать файл в имя файла temp (с другим суффиксом), а затем его атомарно перемещать в расширения файлов, которые вы выполняете (большинство ОС поддерживают это). В качестве последнего средства вы также можете отслеживать файл в течение короткого периода времени для изменения размера файла (что явно не идеально). –