实操-Java-实现合并本地图片文件去重功能
原创约 1235 字大约 4 分钟...
265-实操-Java-实现合并本地图片文件去重功能.md
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
示例代码
package com.tencent.chapter03.照片去重功能;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
/**
* <p>Title: Photoquchong</p>
* <p>
* Description:
* </p>
* @author xianxian
* @date 2023年1月15日
*/
public class Photoquchong {
public static void main(String[] args) {
File file_a = new File("F:\\Java测试文件夹\\新建文件夹"),
file_b = new File("F:\\Java测试文件夹\\合并文件汇总");
String file_c = "F:\\Java测试文件夹\\c相同照片质量较小",
file_d = "F:\\Java测试文件夹\\d相同质量相等照片";
hbFiles(file_a,file_b,file_c,file_d);
}
/**
* <p>Title: compareString</p>
* <p>
* Description:
* 比较 destStr 字符串 是否 包含 srcStr 字符串
* </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company: www.baidudu.com</p>
* @param srcStr
* @param destStr
* @param headortail 从头或者尾截取 destStr 字符串进行比较 从头传参为 0 尾部 为 -1
* @return
* @author xianxian
* @date 2023年1月16日
* @version 1.0
*/
private static Boolean compareString(String srcStr,String destStr,int headortail) {
if(destStr.length() > srcStr.length()) {
if(headortail == 0) {//如果为0则从开始截取字符串相比较
return destStr.substring(0, srcStr.length()).equals(srcStr);
}else {//否则从尾部截取比较
return destStr.substring(destStr.length() - srcStr.length()).equals(srcStr);
}
}else {
return false ;
}
}
/**
* <p>Title: hbFiles</p>
* <p>
* Description:
* 实现图片的两文件夹合并去重功能
* 例a 文件夹 与 b 文件夹中 有很多同名文件 该方法将 a 文件夹合并到b文件夹中
* 同名文件 内存较小存放c文件夹
* 内存相同存放d文件夹
* 内存较大的存放b文件夹
* 最终清空a文件夹为目的
* </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company: www.baidudu.com</p>
* @param file_a 源文件夹
* @param file_b 目标文件夹
* @param file_c 存放 相同照片质量较小 文件夹
* @param file_d 存放 相同质量相等照片 文件夹
* @author xianxian
* @date 2023年1月15日
* @version 1.0
*/
private static void hbFiles(File file_a, File file_b, String file_c, String file_d) {
File[] fileas = file_a.listFiles(), filebs = file_b.listFiles();
for (File file_a_iteam : fileas) {
Boolean result = false;// 是否有重复 默认没有重复
if(file_a_iteam.isFile() && compareString("", file_a_iteam.getName(), 0)) {
// 将a文件夹中的元素与b文件夹中的每一个元素相比较
for (File file_b_iteam : filebs) {// 如果目标文件为空进不了这个循环
if (file_b_iteam.isFile()) {
/**
* 1. 如果 a文件夹中元素 与 与 b文件夹中的任意一个元素 名字相同 则 比较 它们的大小 否则 将 其移动到对应的文件夹
*/
if (file_a_iteam.getName().equals(file_b_iteam.getName())) {
result = true;// 名字相同了 表示有复复的了 更改为true
if (file_a_iteam.length() > file_b_iteam.length()) {
// b元素应该先移动至 F:\Java测试文件夹\相同照片质量较小 文件夹
// 如果a无互比b元素大 则 将大的元素 移动至 F:\Java测试文件夹\相同照片质量较大 文件夹
moveFile(file_b_iteam.getAbsolutePath(), file_c);
moveFile(file_a_iteam.getAbsolutePath(), file_b_iteam.getParent());
System.out.println(file_b.getAbsolutePath() + " 移动至了 " + file_c + " NO.149 result: 1 ");
System.out.println(file_a_iteam.getAbsolutePath() + " 移动至了 " + file_b.getAbsolutePath()
+ " NO.150 result:1 ");
break;
} else {
// 否则将其再进行比较
if (file_a_iteam.length() == file_b_iteam.length()) {
// 如果质量相同则将其移动至 F:\Java测试文件夹\相同照片质量相等 文件夹
moveFile(file_a_iteam.getAbsolutePath(), file_d);
System.err.println(
file_a_iteam.getAbsolutePath() + " 移动至了 " + file_d + " NO.155 result:2 ");
break;
} else {
// 否则将其移动至 F:\Java测试文件夹\相同照片质量较小 文件夹
moveFile(file_a_iteam.getAbsolutePath(), file_c);
System.out.println(
file_a_iteam.getAbsolutePath() + " 移动至了 " + file_c + " NO.159 result:3 ");
break;
}
}
}
}
}
if (!result) {// 无重复时 将aitem 直接 存入到 b文件夹
moveFile(file_a_iteam.getAbsolutePath(), file_b.getAbsolutePath());
System.out.println(
file_a_iteam.getAbsolutePath() + " 移动至了 " + file_b.getAbsolutePath() + " NO.163 result:4 ");
}
}
}
}
/**
* <p>Title: moveFile</p>
* <p>
* Description: 移动文件
* </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company: www.baidudu.com</p>
* @param src
* @param dest
* @author xianxian
* @date 2023年1月15日
* @version 1.0
*/
private static void moveFile(String src, String dest) {
File targetPart = new File(dest);
if (!targetPart.exists()) {
targetPart.mkdirs();//创建此抽象路径名指定的目录。
}
// 以src的最后一个"\"取其下标 截取字符从 最后一个 "\" 到结束 得到 src 的文件全名 再将其 拼接到目标文件名中
dest = dest + File.separator + src.substring(src.lastIndexOf(File.separator) + 1, src.length());
try {
Files.move(Paths.get(src), Paths.get(dest),StandardCopyOption.ATOMIC_MOVE);
System.out.println("成功了");
} catch (IOException e) {
System.out.println("失败了,失败信息: " + e.getMessage());
e.printStackTrace();
}
}
}
实现效果
- 运行代码得到如下结果

- 手动 F:\Java测试文件夹\c相同照片质量较小 挪动到 F:\Java测试文件夹\合并文件汇总 进行比对如下

- 手动 F:\Java测试文件夹\d相同质量相等照片 挪动到 F:\Java测试文件夹\合并文件汇总 进行比对如下

分割线
相关信息
以上就是我关于 Java-实现合并本地图片文件去重功能 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。
Powered by Waline v2.15.4