Oleh kerana pasukan projek pusat data perlu melaksanakan keperluan memantau folder atau fail log dan membaca data kotor dalam format yang sepadan, untuk menjalankan perniagaan yang sepadan apabila fail dan folder berubah. jadi pelaksanaan pemilihan perniagaan dan teknologi yang berkaitan direkodkan di sini.
Mula-mula anda perlu menambah kebergantungan yang sepadan:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency>
Versi ini boleh dipilih sendiri versi 2.7 dan ke atas memerlukan Java 8
Tangkapan skrin tapak web rasmi:
Pakej org.apache.commons.io.monitor
dalam Apache Commos IO menyediakan pemantauan sistem fail fungsi.
Ringkasan dalam satu ayat: Melalui mod pemerhati dan mekanisme pemantauan acara, dengan FileAlterationObserver
sebagai teras , Melalui FileAlterationListener
, FileAlterationMonitor
, pemantauan acara sistem fail boleh dicapai.
Proses keseluruhan:
Sesuaikan kelas pemantauan fail dan warisi FileAlterationListenerAdaptor
untuk mencipta fail dan direktori, memproses peristiwa pengubahsuaian dan pemadaman
Kelas pemantauan fail tersuai, buat pemerhati dengan menyatakan direktori FileAlterationObserver
untuk memantau ini Tambah fail pemerhati sistem dan tambahkan pendengar fail
melalui ApplicationRunner
atau CommandLineRunner
untuk memanggil dan melaksanakan
Kelas pemantauan fail:
/** * 文件监听类 * @author Greenarrow * @date 2022-05-12 14:43 **/ public class FileListener extends FileAlterationListenerAdaptor { private static Logger logger = LoggerFactory.getLogger(FileListener.class); @Override public void onStart(FileAlterationObserver observer) { super.onStart(observer); logger.info("onStart"); } @Override public void onDirectoryCreate(File directory) { logger.info("[新建]:" + directory.getAbsolutePath()); } @Override public void onDirectoryChange(File directory) { logger.info("[修改]:" + directory.getAbsolutePath()); } @Override public void onDirectoryDelete(File directory) { logger.info("[删除]:" + directory.getAbsolutePath()); } @Override public void onFileCreate(File file) { String compressedPath = file.getAbsolutePath(); logger.info("[新建]:" + compressedPath); List<String> contentList = null; try { if (file.canRead()){ // 将文件按行读取为字符串集合 contentList = FileUtils.readLines(new File(compressedPath), StandardCharsets.UTF_8); if (CollectionUtil.isNotEmpty(contentList)){ // 获取对应格式的数据并输出,这里可自行添加业务处理 List<String> dirtyRecord = contentList.stream().filter(s -> s.startsWith("{") && s.endsWith("}")).collect(Collectors.toList()); dirtyRecord.forEach(System.out::println); } } } catch (IOException e) { e.printStackTrace(); logger.error("读取文件内容失败",e); } } @Override public void onFileChange(File file) { String compressedPath = file.getAbsolutePath(); logger.info("[修改]:" + compressedPath); } @Override public void onFileDelete(File file) { logger.info("[删除]:" + file.getAbsolutePath()); } @Override public void onStop(FileAlterationObserver observer) { super.onStop(observer); logger.info("onStop"); } }
Kelas pemantauan fail:
/** * 文件监听测试 demo * @author Greenarrow * @date 2022-05-12 14:45 **/ public class FileMonitor { FileAlterationMonitor monitor = null; public FileMonitor(long interval) throws Exception { monitor = new FileAlterationMonitor(interval); } /** * 给文件添加监听 * @param path * @param listener */ public void monitor(String path, FileAlterationListener listener) { FileAlterationObserver observer = new FileAlterationObserver(new File(path)); monitor.addObserver(observer); observer.addListener(listener); } public void stop() throws Exception { monitor.stop(); } public void start() throws Exception { monitor.start(); } }
Sesuaikan Pelari dan laksanakan CommandLineRunner
:
/** * 项目启动之后开启文件监听功能 * @author Greenarrow * @date 2022-05-12 10:02 **/ @Component // @Order(Integer.MIN_VALUE) public class DirtyRecordRunner implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(DirtyRecordRunner.class); @Value("${test}") private String path; @Override public void run(String... args) throws Exception { logger.info(this.getClass().getName()+"[开启文件夹监听功能]"); FileMonitor fileMonitor = new FileMonitor(1000); fileMonitor.monitor(path,new FileListener()); fileMonitor.start(); } }
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemantauan fail log dan membaca data berkaitan dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!