Проблемы с WatchService - файл журнала не обновляется при модификации

Я использую (стороннее) приложение для Windows10, которое генерирует файлы журнала.txt. В моем собственном приложении я написал класс, который использует WatchService и наблюдает за папкой для этих изменений.txt. Я знаю, что мой класс работает правильно, потому что я тестировал с другими файлами /JUnit. Во время тестирования изменения сразу подобраны, все правильно.

В случае логов.txt ничего не берется.

Я поиграл и заметил, что мое приложение забирает обновления, только если я иду в окно проводника и нажимаю F5 (обновить). Размер файла обновляется, а также мой WatchService запускает обновление.

Любая идея, почему это странное поведение произойдет? Вероятно, это на уровне приложения журнала или самой Windows, но мне интересно, кто-нибудь может придумать решение этой проблемы с Java?

1 ответ

Поскольку нет предложений, я поделюсь тем, что сделал, решение, которое мне не особенно нравится, но, возможно, оно будет кому-то полезно.

Чтобы обновить папку, я просто создал цикл, который проверяет размеры файлов. Приведенный ниже код проверяет размеры всех файлов, но если вы знаете точное имя файла, вы также можете реализовать это для этого конкретного файла.

File folder = new File("C:\\path\\to\\logs\\");
while (true)
{
    Thread.sleep(5000);

    File[] listOfFiles = folder.listFiles();
    for (File f : listOfFiles)
    {
        System.out.println("\tFile size: " + f.length());
    }
}

Вы также можете изменить значение режима сна с 5000 (5 секунд), если вам нужно, чтобы оно проверялось более или менее часто.

Другие вопросы по тегам