Использование Java SE 7 или выше:
WatchService
API позволяет отслеживать файловые операции (создавать, изменять и удалять файлы) в указанном каталоге. В этом сценарии создайте службу наблюдения для отслеживания новых файлов, созданных в определенной папке. Каждый раз, когда создается новый файл, запускается файл, создающий событие, и процесс позволяет выполнять определенные пользователем действия.
Файл уже имеет созданный атрибут времени (java.nio.file.attribute.BasicFileAttributes
). Это может быть извлечено как тип java.nio.file.attribute.FileTime
, который находится в миллис или может быть более конкретным java.util.concurrent.TimeUnit
(это позволяет наносекунда точность). Это дает возможность более точно определить, что является самым новым файлом.
Также есть возможность создать пользовательский определяемый пользователем атрибут файла для любого файла. Атрибут позволяет определять как пару ключ-значение. Это уникальное значение атрибута может быть связано с файлом, чтобы определить, является ли он самым последним. Следующие API позволяют создавать и читать пользовательский атрибут файла: java.nio.file.attribute.UserDefinedFileAttributeView
и Files.getFileAttributeView()
.
Я думаю, что используя вышеописанные API и методы, можно создать приложение для отслеживания последних файлов, созданных в указанной папке, и выполнения необходимых действий. Обратите внимание, что при использовании этих API-интерфейсов механизм блокировки не задействован.
РЕДАКТИРОВАТЬ (в комплекте):
Использование коллекции для получения последнего файла:
Потокобезопасная коллекция может использоваться для хранения имен файлов (или пути к файлу) и извлечения их LIFO («последний пришел первым - вышел»). Служба наблюдения (или аналогичный процесс) может хранить имя файла (последнего) файла, созданного в папке этой коллекции. Операция чтения просто получает последнее имя файла из этой коллекции и работает с ним. Можно рассмотреть java.util.concurrent.ConcurrentLinkedDeque
или LinkedBlockingDeque
на основе требований.
РЕДАКТИРОВАТЬ (в комплекте):
Схема возможных решений: