三个文件中各有一列姓名,全查出来后去重
依据去重后的人名从n张图片中筛选出这些人的
一个人可能有多张图片,需要全部筛选出来
package demo;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import lombok.Data;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* prudence
* 2023/2/1 上午9:51
*/
public class PictureMap {
public static void main(String[] args) {
ExcelReader reader = ExcelUtil.getReader("/Users/prudence/Desktop/a.xlsx");
ExcelReader reader2 = ExcelUtil.getReader("/Users/prudence/Desktop/b.xlsx");
ExcelReader reader3 = ExcelUtil.getReader("/Users/prudence/Desktop/c.xlsx");
List<ExcelDemo> excelDemos = reader.readAll(ExcelDemo.class);
List<ExcelDemo> excelDemos2 = reader2.readAll(ExcelDemo.class);
List<ExcelDemo> excelDemos3 = reader3.readAll(ExcelDemo.class);
System.out.println("a.xlsx:" + excelDemos.size());
System.out.println("b.xlsx:" + excelDemos2.size());
System.out.println("c.xlsx:" + excelDemos3.size());
System.out.println("总数:" + (excelDemos.size() + excelDemos2.size() + excelDemos3.size()));
List<String> allNames = new ArrayList<>();
allNames.addAll(excelDemos.stream().map(ExcelDemo::getName).collect(Collectors.toList()));
allNames.addAll(excelDemos2.stream().map(ExcelDemo::getName).collect(Collectors.toList()));
allNames.addAll(excelDemos3.stream().map(ExcelDemo::getName).collect(Collectors.toList()));
Map<String, Integer> map = new HashMap<>();
for (String name : allNames) {
Integer i = 1; //定义一个计数器,用来记录重复数据的个数
if (map.get(name) != null) {
i = map.get(name) + 1;
}
map.put(name, i);
}
System.out.println("数据及个数:" + map.toString());
System.out.print("重复的数据为:");
for (String name : map.keySet()) {
if (map.get(name) > 1) {
System.out.print(name + " ");
}
}
List<String> disNames = allNames.stream().distinct().collect(Collectors.toList());
System.out.println("\n去重后:" + disNames.size());
List<String> targetFileNames = new ArrayList<>();
String picPath = "/Users/prudence/Desktop/证书";
List<String> allPics = iterFile(picPath);
System.out.println("全量图片:" + allPics.size() + "\t" + allPics);
for (String picName : allPics) {
String[] nameArr = picName.split("22");
String name = nameArr[0];
if (disNames.contains(name)) {
targetFileNames.add(picName);
}
}
System.out.println("筛选后图片:" + targetFileNames.size() + "\t" + targetFileNames);
String tagetPath = "/Users/prudence/Desktop/筛选后证书";
File targetPath = new File(tagetPath);
if (!targetPath.exists()) {
targetPath.mkdir();
}
for (String fileName : targetFileNames) {
String source = picPath + "/" + fileName;
File sourceFile = new File(source);
String target = tagetPath + "/" + fileName;
File targetFile = new File(target);
try {
Files.copy(sourceFile.toPath(), targetFile.toPath());
} catch (IOException e) {
System.out.println(e);
}
System.out.println("图片:" + fileName + " 复制完毕");
}
}
public static List<String> iterFile(String path) {
List<String> fileNames = new ArrayList<>();
File file = new File(path);
//子文件或者子文件夹的名称
String[] files = file.list();
for (String fileName : files) {
fileNames.add(fileName);
}
return fileNames;
}
}
@Data
class ExcelDemo {
private String name;
}
该代码示例展示了如何利用Hutool库读取多个Excel文件,合并姓名列表,进行去重操作,然后根据去重后的人名在指定目录下筛选图片,并将匹配的图片复制到新的目录。

715

被折叠的 条评论
为什么被折叠?



