平台指定路径下面文件,正常File文件读取是根据名称进行识别读取。通过读取的文件进行数据缓存利用。潜在问题:同一个文件部署时候(不小心)存在多个,那么出现旧的文件被读取进行缓存,照成排查时候定位非常困难。打算文件进行时间排序(降序),然后进行读取并后续处理
需求说明
希望排序后,再读取文件
案例调试
==>【DB】文件相关配置数据,原始排序:FileDb{fileName='DB_262 (1).db', createTime='2022-01-04 06:30:36'}
==>【DB】文件相关配置数据,原始排序:FileDb{fileName='DB_262.db', createTime='2022-01-04 06:29:57'}
==>【DB】文件相关配置数据,原始排序:FileDb{fileName='DB_690.db', createTime='2022-01-04 07:35:28'}
<==【DB】文件相关配置数据,时间排序:FileDb{fileName='DB_690.db', createTime='2022-01-04 07:35:28'}
<==【DB】文件相关配置数据,时间排序:FileDb{fileName='DB_262 (1).db', createTime='2022-01-04 06:30:36'}
<==【DB】文件相关配置数据,时间排序:FileDb{fileName='DB_262.db', createTime='2022-01-04 06:29:57'}
参考代码
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
public class test06 {
@Test
public void Test01() throws Exception {
String path = "D:\\usr\\db";
File sqLiteFile = new File(path);
if (!sqLiteFile.exists()) {
sqLiteFile.mkdirs();
}
File[] fs = sqLiteFile.listFiles();
if (fs.length == 0) {
System.out.println("【" + path + "】下未找到相关配置数据,请参考集成文档【https://baidu.com】");
}
List<FileDb> fileDbList = getFileDbList(fs);
if (fileDbList.size() > 0) {
fileDbList.stream().forEach(e -> log.info("==>【DB】文件相关配置数据,原始排序:" + e.toString()));
listSort(fileDbList);
fileDbList.stream().forEach(e -> log.info("<==【DB】文件相关配置数据,时间排序:" + e.toString()));
/*for (FileDb file : fileDbList) {
//缓存业务处理 System.out.println(file.toString());
}*/
}
}
/**
* 根据时间排序(其他排序如根据id排序也类似)
*
* @param list
*/
public static void listSort(List<FileDb> list) {
Collections.sort(list, new Comparator<FileDb>() {
@Override
public int compare(FileDb o1, FileDb o2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date dt1 = format.parse(o1.getCreateTime());
Date dt2 = format.parse(o2.getCreateTime());
if (dt1.getTime() < dt2.getTime()) {
return 1;//大的放前面
} else {
return -1;
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
});
}
/**
* 获取文件名称和创建时间
*
* @param fs
* @return
*/
public static List<FileDb> getFileDbList(File[] fs) {
List<FileDb> fileDbList = new ArrayList<>();
for (File file : fs) {
if (!file.getName().toLowerCase().contains(".db")) {
continue;
}
BasicFileAttributes bAttributes = null;
try {
bAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
String fileName = file.getName();
// 修改时间 .replace(/\.[\d]{3}Z/
String changeTime = bAttributes.lastModifiedTime().toString();
changeTime = changeTime.substring(0, changeTime.lastIndexOf("."));
changeTime = changeTime.replace("T", " ");
FileDb fileDb = new FileDb(fileName, changeTime);
fileDbList.add(fileDb);
} catch (Exception e) {
e.printStackTrace();
}
}
return fileDbList;
}
/**
* @description: 文件
* @author: Lucky
* @create: 2022-01-04 13:37
**/
public static class FileDb {
private String fileName;
private String createTime;
public FileDb() {
}
public FileDb(String fileName, String createTime) {
this.fileName = fileName;
this.createTime = createTime;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "FileDb{" +
"fileName='" + fileName + '\'' +
", createTime='" + createTime + '\'' +
'}';
}
}
}