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