Я создал 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
- Третья проблема: в журнале нет данныхфайл