/**
* 左括号
*/
private static final String LEFT_LITTLE_BRACKETS = "(";
/**
* 右括号
*/
private static final String RIGHT_LITTLE_BRACKETS = ")";
private void checkDuplicate(List<FileObjectVO> fileObjectVOList) {
//用来记录文件名出现次数的map
Map<String, Integer> nameMap = new HashMap<>();
for (FileObjectVO fileObjectVO : fileObjectVOList) {
String fileName = fileObjectVO.getFileName();
if (nameMap.isEmpty()) {
nameMap.put(fileName, 0);
continue;
}
Integer numberValue = nameMap.get(fileName);
//如果文件名字第一次出现
if (numberValue == null) {
nameMap.put(fileName, 0);
} else {
//如文件名出现过,统计出现次数
nameMap.put(fileName, numberValue + 1);
//生成一个新的文件名 :原文件名+(value),并将新的文件名放入map中
int endIndex = fileName.lastIndexOf(CharUtil.DOT);
//文件名字
String fileNameTempLeft = fileName.substring(0, endIndex);
//文件后缀名
String fileNameTempRight = fileName.substring(endIndex + 1);
String newFileName = fileNameTempLeft + LEFT_LITTLE_BRACKETS + (numberValue + 1) + RIGHT_LITTLE_BRACKETS + CharUtil.DOT + fileNameTempRight;
nameMap.put(newFileName, 0);
//将返回数据中的数据更新为新的文件名
fileObjectVO.setFileName(newFileName);
}
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class FileObjectVO {
/**
* 文件名
*/
private String fileName;
}
之前接了某个需求:批量下载文件,并压缩。但是后续出了些问题,具体表现为:文件名重复,导致多个文件只要某文件名重复时候,压缩下载数据时,发生了丢失文件的情况。
采(Ctrl)用(C)了网上找的比较全面的工具类,又因为用到递归被技术总监无情否决了,所以写了一个简易的方法去除文件名重复的情况。