实操-Java-实现合并本地图片文件去重功能

涎涎原创约 1235 字大约 4 分钟...JavaJava

265-实操-Java-实现合并本地图片文件去重功能.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

示例代码

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();
		}
	}
}

实现效果

  1. 运行代码得到如下结果
  1. 手动 F:\Java测试文件夹\c相同照片质量较小 挪动到 F:\Java测试文件夹\合并文件汇总 进行比对如下
  1. 手动 F:\Java测试文件夹\d相同质量相等照片 挪动到 F:\Java测试文件夹\合并文件汇总 进行比对如下

分割线


相关信息

以上就是我关于 Java-实现合并本地图片文件去重功能 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4