支持年月日算法,支持年月日和指定参数匹配,下面是核心算法
package org.jeecg.modules.lisListen.utils;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.fileManager.FileUtils;
import org.jeecg.common.util.fileManager.StringUtils;
import org.jeecg.modules.lisListen.device.DeviceBase;
import org.jeecg.modules.lisListen.util.MessageUtils;
import java.util.Date;
/**
* @version 1.0
* @Author zhaozhiqiang
* @Date 2022/3/23 16:39
* @Description //TODO 数据库和文本路径匹配查询
*/
@Slf4j
public class FilePathSeachUtils {
public static final String YYYY_MM_DD = "#{yyyy-MM-dd}";//2022-03-23
public static final String YYYYMMDD = "#{yyyyMMdd}";//20220323
public static final String YYMMDD = "#{yyMMdd}";//220323
public static final String YYMDD = "#{yyMdd}";//22323
public static final String YY = "#{yy}";//22
public static final String YYYY = "#{yyyy}";//2022
public static final String MM = "#{MM}";//03
public static final String M = "#{M}";//3
public static final String DD = "#{dd}";//23
public static final String D = "#{d}";//23
public static final String YYNIAN = "#{yy年}";//23年
public static final String YYYYNIAN = "#{yyyy年}";//20223年
public static final String MMYUE = "#{MM月}";//03月
public static final String MYUE = "#{M月}";//3月
public static final String DDRI = "#{dd日}";//23日
public static final String DRI = "#{d日}";//23日
public static final String yyyyMMddHH = "#{yyyyMMddHH}";//2023032316
public static final String dynamic = "#{*}";//动态拼接字符串可以和目录或者文件名拼接,动态参数具体有业务来判断是样本号或者其他的;比如样本号拼接
/**
* @version 1.0
* @Author zhaozhiqiang
* @Date 2022/3/23 17:03
* @Description //TODO ACESS数据库判断
*/
public static void checkPath(DeviceBase deviceBase, String path, String beginSampleNo) {
if (StringUtils.isNotEmpty(path)) {
if (path.contains("#")) {//标识动态匹配了
Result result = transferAlgorithm(path, "");
if (result.isSuccess()) {//文件或者路径存在
//todo 如果是数据库模式,子类待重写此方法
deviceBase.processDB(result.getMessage(), beginSampleNo);//此处代表,数据库文件路径是死的,不需要日期
} else {
MessageUtils.errorMessage(result.getMessage());
System.exit(1);// 连接失败,进程退出
return;
}
} else {//精确查找了
if (FileUtils.exist(path)) { //精确查找文件
//todo 如果是数据库模式,子类待重写此方法
deviceBase.processDB(path, beginSampleNo);//此处代表,数据库文件路径是死的,不需要日期
} else {
MessageUtils.errorMessage("当前" + path + "下,文件或目录不存在");
System.exit(1);// 连接失败,进程退出
return;
}
}
} else {
MessageUtils.errorMessage("AECESS数据库地址为空");
System.exit(1);// 连接失败,进程退出
return;
}
}
public static void main(String[] args) {
String path = "G:\\lis解析数据\\各类型接口数据\\listen\\BS820\\Bak\\20220322\\#{yy年}\\#{MM}\\#{dd}.mdb";
Result result = transferAlgorithm(path, "0000");
System.out.println(result.getMessage());
}
/**
* 转义算法
* 1 如果是目录
* 1.1 动态+#{*}
* 2 如果是文件
* 2.1 静态+动态i
* 2.2 静态
*
* @param path
* @param seroNumber #{*} 动态参数序列号
*/
private static Result transferAlgorithm(String path, String seroNumber) {
Result result = new Result();
String transferPath = "";//转义后的路径
if (path.contains("#")) {//标识动态匹配了
String[] split = path.split("#");
for (int i = 0; i < split.length; i++) {
//1 如果是目录
if (split[i].contains("\\")) {//如果是目录并且后面没有#{*}那么后面肯定有路径符号\\ \#{yy年}\
//判断当前切割后的字符串包含动态参数没
if (org.apache.commons.lang3.StringUtils.isNotEmpty(matchingStr(split[i]))) {//动态匹配了
String str = matchingStr(split[i]);
transferPath = transferPath + str + "\\";
} else if (org.apache.commons.lang3.StringUtils.isEmpty(matchingStr(split[i])) && !split[i].contains("{*}")) {//说明当前是死的路径直接拼接
transferPath = transferPath + split[i] + "\\";
} else if (org.apache.commons.lang3.StringUtils.isEmpty(matchingStr(split[i])) && split[i].contains("{*}")) {//说明当前是目录并且是{*}
transferPath = transferPath + seroNumber + "\\";
}
} else if (!split[i].contains("\\") && !split[i].contains(".")) {//如果不包含路径符号并且不包含文件后缀.那么还是一个目录通过两个动态参数组成的 \#{yy年}
String str = matchingStr(split[i]);
transferPath = transferPath + str;
} else if (split[i].contains("\\") && !split[i].contains(".") && split[i].contains("{*}")) {//如果不包含路径符号并且不包含文件后缀.那么还是一个目录通过两个动态参数组成的 \#{yy年}#{*}\
transferPath = transferPath + seroNumber + "\\";
} else if (split[i].contains(".") || (org.apache.commons.lang3.StringUtils.isNotEmpty(split[i + 1]) && split[i + 1].contains("."))) { //2 如果是文件,文件后面肯定有.文件符号
if (!split[i].contains(".")) { //2.1 静态+动态
transferPath = transferPath + split[i];
} else if (split[i].contains(".") && org.apache.commons.lang3.StringUtils.isNotEmpty(matchingStr(split[i]))) {//2.1 静态+动态
String str = matchingStr(split[i]);
transferPath = transferPath + str + "."+split[i].split("\\.")[1];
} else if (split[i].contains(".") && org.apache.commons.lang3.StringUtils.isEmpty(matchingStr(split[i]))) { //2.2 静态
transferPath = transferPath + split[i];
}
}
}
}
result.setSuccess(true);
result.setMessage(transferPath);
return result;
}
/**
* @version 1.0
* @Author zhaozhiqiang
* @Date 2022/3/23 17:25
* @Description //TODO 字符串路径匹配判断
*/
public static String matchingStr(String filePathName) {
filePathName = "#" + filePathName;
String[] split = filePathName.split("\\}");
filePathName = split[0] + "}";
String formatStr = "";
switch (filePathName) {
case YYYY_MM_DD://2022-03-23
formatStr = DateUtils.formatDate(new Date(), "yyyy-MM-dd");
return formatStr;
case YYYYMMDD://20220323
formatStr = DateUtils.formatDate(new Date(), "yyyyMMdd");
return formatStr;
case YYMMDD://220323
formatStr = DateUtils.formatDate(new Date(), "yyMMdd");
return formatStr;
case YYMDD://22323
formatStr = DateUtils.formatDate(new Date(), "yyMdd");
return formatStr;
case YY://22
formatStr = DateUtils.formatDate(new Date(), "yy");
return formatStr;
case YYYY://2022
formatStr = DateUtils.formatDate(new Date(), "yyyy");
return formatStr;
case MM://03
formatStr = DateUtils.formatDate(new Date(), "MM");
return formatStr;
case M://3
formatStr = DateUtils.formatDate(new Date(), "M");
return formatStr;
case DD://23
formatStr = DateUtils.formatDate(new Date(), "dd");
return formatStr;
case D://23
formatStr = DateUtils.formatDate(new Date(), "d");
return formatStr;
case YYNIAN://23年
formatStr = DateUtils.formatDate(new Date(), "yy") + "年";
return formatStr;
case YYYYNIAN://20223年
formatStr = DateUtils.formatDate(new Date(), "yyyy") + "年";
return formatStr;
case MMYUE://03月
formatStr = DateUtils.formatDate(new Date(), "MM") + "月";
return formatStr;
case MYUE://3月
formatStr = DateUtils.formatDate(new Date(), "M") + "月";
return formatStr;
case DDRI://23日
formatStr = DateUtils.formatDate(new Date(), "dd") + "日";
return formatStr;
case DRI://23日
formatStr = DateUtils.formatDate(new Date(), "d") + "日";
return formatStr;
case yyyyMMddHH://2023032316
formatStr = DateUtils.formatDate(new Date(), yyyyMMddHH);
return formatStr;
}
return formatStr;
}
}