У меня есть рабочий код, который прослушивает каталог с помощью WatchService и отвечает на события, которые я указываю. Это отлично работает и проверено как на linux, так и на mac (хотя на последнем видно, что используется опрос).Есть ли способ для силового опроса с использованием WatchService?
Однако, когда я развернул это в процессе производства, выясняется, что контролируемый каталог является монтированием NFS. Поскольку WatchService использует inotify при работе в Linux, никогда не происходило никаких событий, потому что NFS-монтирования не запускают события inotify (или что-то вроде этого, здесь есть дополнительная информация, которая объясняет мою проблему: Java WatchService not generating events while watching mapped drives).
Поскольку мой код уже написан, я бы предпочел заставить WatchService использовать реализацию опроса, а не inotify. Есть ли способ сделать это?
Я попытался найти исходный код sun.nio.fs.PollingWatchService и создать объект напрямую (вместо использования FileSystems.getDefault(). NewWatchService()), но при регистрации службы с помощью пути я получил это исключение : java.nio.file.ProviderMismatchException.
Итак, любые идеи? Поскольку я уже реализовал код с помощью WatchService и WatchKey API, было бы намного проще просто заставить опрос, чем переписывать все, используя пользовательский или сторонний опроллер. Благодаря!
Это своего рода медленный и неэффективный, но то, что о 'Файл F = новый файл (YOUR_DIRECTORY, "_garbage.tmp"); новый FileOutputStream (f) .close(); f.delete(); 'и просто слушать создание файлов с именем' _garbage.tmp "'? –
@k_g: Спасибо за ответ, но я не понимаю, как это помогает. Любой шанс, который вы могли бы разработать? – rjcarr
Если вы создадите файл и удалите его, он должен запустить событие WatchService, правильно? –