Моя ключевая рекомендация - не изобретать велосипед, если у вас нет особых требований.
Если вы используете Java 7, вы можете воспользоваться WatchService (как предлагает Simeon G).
Если вы ограничены Java 6 или более ранней версией, эти службы недоступны в JRE. Однако Apache Commons-IO обеспечивает мониторинг файлов. См. здесь .
В качестве преимущества перед Java 7 мониторы Commons-IO создадут для вас поток, который генерирует события для зарегистрированного обратного вызова. В Java 7 вам нужно будет самостоятельно опросить список событий.
Если у вас есть события, вы можете использовать ExecutorService для обработки файлов вне потока. Перемещение файлов поддерживается Java IO, и вы можете просто игнорировать любые возникающие события удаления.
Я успешно использовал эту модель в прошлом.
Вот некоторые вещи, на которые стоит обратить внимание:
Новое событие файла, скорее всего, будет вызвано, если файл существует в каталоге. ОДНАКО, данные все еще будут записываться в него. Примите во внимание разумные ожидания относительно размера файла и того, как долго вам нужно ждать, пока файл не будет считаться «целым»
Какое максимальное количество времени вы должны потратить на файл?
Настройте параметры службы исполнителя с помощью конфигурации - это упростит тестирование производительности
Надеюсь, это поможет. Удачи.