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();
}
}
posted @   一个小笨蛋  阅读(629)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示