Мониторинг событий папок с помощью Springboot и сборки Json - PullRequest
0 голосов
/ 10 октября 2019

Я создал Class, который реализован в приложении SpringBoot. Цель этого класса состоит в мониторинге папки, регистрации событий, связанных с файлами, и создании файла Json, который будет отправлен в другой API REST. Поскольку это приложение запускается одновременно с приложением springboot, я аннотировал его как компонент.

Поскольку я также хочу реагировать на события, я также реализую ApplicationListener.

Я создал метод getLogs, который создает файл журнала на рабочем столе.

public void getLogs(String event) {
    try {
        FileHandler fh = new FileHandler("C:\\Users\\username\\Desktop\\Logs\\LogFile.log");
        logger.addHandler(fh);
        SimpleFormatter formatter = new SimpleFormatter();
        fh.setFormatter(formatter);

    } catch (SecurityException | IOException e) {
        e.printStackTrace();
    }
 }

Я также создал второй метод, который может отслеживать папку:

public void watchFolder() throws InterruptedException, IOException {
    WatchService watchService = null;
    watchService = FileSystems.getDefault().newWatchService();

    Path path = Paths.get(System.getProperty("user.home"));

    path.register(watchService,
        StandardWatchEventKinds.ENTRY_CREATE,
        StandardWatchEventKinds.ENTRY_DELETE,
        StandardWatchEventKinds.ENTRY_MODIFY);


    WatchKey key;
    while ((key = watchService.take()) != null) {
        for (WatchEvent<?> event : key.pollEvents()) {
            System.out.println("Event kind:" + event.kind() + ". File affected: " + event.context() + ".");
            String currentEvent = "Event kind:" + event.kind() + ". File affected: " + event.context() + ".";
            getLogs(currentEvent);
        }
        key.reset();
    }
}

И, наконец, я переопределяю метод onApplicationEvent:

@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
    System.out.println("watchFolder() has been launched");
    try {
         watchFolder();
     } catch (InterruptedException | IOException e) {
         e.printStackTrace();
     }
 } 

Приложение запускается при запуске приложения, и у меня возникают проблемы, связанные с журналами.

Вот результат моей консоли:

При запуске у меня появляется сообщение о создании файла журнала:

Вид события: ENTRY_MODIFY. Затронутый файл: ntuser.dat.LOG1.

Когда я создаю файл:

Вид события: ENTRY_MODIFY. Затрагиваемый файл: Documents.

Когда я редактирую файл и сохраняю его, событие отображается 1 раз из 2. И событие журнала относится к файлу журнала:

Вид события: ENTRY_MODIFY. Файл затронут: ntuser.dat.LOG2.

Когда я переименовываю файл, я получаю:

Вид события: ENTRY_MODIFY. Затронутый файл: Documents.

А когда я его удаляю:

Вид события: ENTRY_MODIFY. Затронутый файл: Documents.

Вот проблемы, которые я пытаюсь решить:

  • Первая проблема: я хотел бы получить имя файла, но я получил только папку
  • Вторая проблема: папка с файлами журналов не должна беспокоить. Они находятся на рабочем столе: C: \ Users \ username \ Desktop \ Logs, и я просто хочу войти в папку «Документы»: C: \ Users \ username \ Documents
  • Третья проблема: в журнале нет данныхфайл
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...