JAVA 7 часовой сервис - PullRequest
       18

JAVA 7 часовой сервис

3 голосов
/ 23 февраля 2012

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

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

Ответы [ 3 ]

4 голосов
/ 23 февраля 2012

WatchService справляется только с изменениями в файловой системе.Файлы, которые уже есть, не были изменены и, таким образом, не отслеживаются WatchService.Вам потребуется рекурсивно пройтись по всем файлам и каталогам, чтобы получить начальный «просмотр» файлов:

Files.walkFileTree(basePath, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file,
                    BasicFileAttributes attrs) throws IOException {
                // do something with the file
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult preVisitDirectory(Path dir,
                    BasicFileAttributes attrs) throws IOException {
                // do something with the directory
                return FileVisitResult.CONTINUE;
            }
        });

Все изменения, которые происходят после инициализации, затем отслеживаются WatchService.

2 голосов
/ 21 мая 2013

У меня здесь тот же вариант использования, и я удивлен, что не нашел много полезного в Интернете для такого распространенного сценария. Я вижу некоторые проблемы в подходе ниже. Допустим, мы используем метод walkTree для сканирования существующих файлов в каталоге, а затем регистрируем каталог для WatchService.

1. Files.walkTree(...);
2. Path dir =  Paths.get(...);
3. WatchService watcher = dir.getFileSystem().newWatchService();       
4. dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
5. // other logic

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

0 голосов
/ 13 июля 2019

WatchService отслеживает зарегистрированные объекты для определенных типов изменений и событий.Код вызывается, когда происходит событие, которое мы слушаем.Мы можем отслеживать создание, удаление или изменение файлов:

  • ENTRY_CREATE
  • ENTRY_DELETE
  • ENTRY_MODIFY

Еслииспользуя

WatchKey watchKey = path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);

… будут сообщаться только новые файлы.Для просмотра уже созданных файлов используйте:

StandardWatchEventKinds.ENTRY_MODIFY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...