Как я могу изменить WatchService на потоковое API - PullRequest
0 голосов
/ 06 февраля 2019

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

try {
            WatchService watchService = FileSystems.getDefault().newWatchService();

            Paths.get(dirPath).register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
            WatchKey key;
            while ((key = watchService.take()) != null) {
                for (WatchEvent<?> event : key.pollEvents()) {

                    String fileName = event.context().toString();
                    if (isPdfFile(fileName)) {
                        runOnOption.get(option).accept(dirFilePath);
                        return;
                    }
                }
                key.reset();
            }
        }
        catch (IOException | InterruptedException e) {}
    }

Метод isPdfFile проверить, является ли файл PDF, и если да, он собирается переименовать и создать файл журнала дляпереименование.Итак, что я смог сделать, это:

    key.pollEvents()
       .stream()
       .filter(e -> isEdxFile(e.context().toString()))
       .forEach( e -> runOnOption.get(option).accept(dirPath+e.context().toString()));

Но чего мне не хватает, так это цикла while и возврата из цикла, когда он найдет файл с расширением pdf.

1 Ответ

0 голосов
/ 06 февраля 2019

Вам может потребоваться

.findFirst() // first element with such a filter condition
.ifPresent(e -> runOnOption.get(option).accept(dirPath+e.context().toString()));

для возврата, как только такой элемент найден после выполнения логики потребителя.

...