hutool 之文件监听修改(WatchMonitor)
需求
文件修改后读取文件根据文件格式上传数据库
实现
使用hutool WatchMonitor
package com.xpm.sync.syncmes; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.watch.SimpleWatcher; import cn.hutool.core.io.watch.WatchMonitor; import cn.hutool.core.io.watch.watchers.DelayWatcher; import cn.hutool.core.lang.Console; import cn.hutool.core.text.csv.*; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import java.io.File; import java.nio.file.Path; import java.nio.file.WatchEvent; import java.time.LocalDateTime; import java.util.List; @Component public class AppRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { startWatch(); } //通过watch 方式 public void startWatch(){ Console.log("ApplicationRunner start"); //监听文件修改 SimpleWatcher watcher = new SimpleWatcher(){ long lastModified = 0L; long current_lastModified = 0L; @Override public void onModify(WatchEvent<?> event, Path currentPath) { File f =FileUtil.file("D:\\test.csv"); current_lastModified = f.lastModified(); //不判断会执行两次的 if(lastModified ==current_lastModified ){ //和上次数据一致,不上传 }else{ lastModified = current_lastModified; //重新记录文件修改时间 //从文件中读取CSV数据 CsvReader reader = CsvUtil.getReader(); CsvData data = reader.read(f); List<CsvRow> rows = data.getRows(); //遍历行 for (CsvRow csvRow : rows) { //getRawList返回一个List列表,列表的每一项为CSV中的一个单元格(既逗号分隔部分) Console.log(csvRow.getRawList()); } //TODO Console.log("上传数据库"+LocalDateTime.now()); } } }; //监听器,延迟500ms执行 WatchMonitor monitor = WatchMonitor.createAll("D:\\test.csv",new DelayWatcher(watcher,500)); monitor.start(); } }
本文来自博客园,作者:一个小笨蛋,转载请注明原文链接:https://www.cnblogs.com/paylove/p/17821769.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】