JAVA中比较两个文件夹不同的方法
2017-10-19 19:02
204 查看
JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同。具体例子如下:
用到的文件model
public class TestFolderCompare { /** * 根据路径获取所有的文件夹和文件,及文件的md5值 * @param path 路径 */ private static Map<String, FileModel> getFiles(String path) throws IOException { Map<String, FileModel> map = new HashMap<String, FileModel>(); File folder = new File(path); Object[] files = getFileList(folder).toArray(); Arrays.sort(files); for (Object obj : files) { File file = (File) obj; // 去掉根目录,正则的\\\\,转义为java的\\,再转义为\ String key = file.getAbsolutePath().replaceAll("\\\\", "/").replaceAll(path, ""); String md5 = "";// 文件夹不比较md5值 if (file.isFile()) { md5 = DigestUtils.md5Hex(new FileInputStream(file)); } FileModel fileModel = new FileModel(file, md5); map.put(key, fileModel); } return map; } /** * 递归获取路径下所有文件夹和文件 * @param folder 文件路径 */ private static List<File> getFileList(File folder) { List<File> list = new ArrayList<File>(); File[] files = folder.listFiles(); for (File file : files) { list.add(file); if (file.isDirectory()) { List<File> fileList = getFileList(file); list.addAll(fileList); } } return list; } /** * 比较两个文件集合的不同 * @param fileMap1 文件集合 * @param fileMap2 文件集合 */ public static List<FileModel> compareFile(Map<String, FileModel> fileMap1, Map<String, FileModel> fileMap2) { List<FileModel> list = new ArrayList<FileModel>(); for (String key : fileMap1.keySet()) { FileModel fileModel1 = fileMap1.get(key); FileModel fileModel2 = fileMap2.get(key); // 将fileMap2中没有的文件夹和文件,添加到结果集中 if (fileModel2 == null) { list.add(fileModel1); continue; } // 文件的md5值不同则add到比较结果集中 if (fileModel1.getFile().isFile() && !fileModel1.getMd5().equals(fileModel2.getMd5())) { list.add(fileModel1); } } return list; } public static void main(String[] args) throws IOException { String path1 = "c:/a1"; String path2 = "c:/a2"; // 获取路径下所有文件夹和文件,及文件的md5值 Map<String, FileModel> fileMap1 = getFiles(path1); Map<String, FileModel> fileMap2 = getFiles(path2); List<FileModel> resultList = new ArrayList<FileModel>(); // 得到fileMap2中没有的文件夹和文件,及md5值不同的文件 resultList.addAll(compareFile(fileMap1, fileMap2)); // 得到fileMap1中没有的文件夹和文件,及md5值不同的文件 resultList.addAll(compareFile(fileMap2, fileMap1)); // 输出最终结果 for (FileModel fileModel : resultList) { System.out.println(fileModel.getFile().getAbsolutePath() + " " + fileModel.getMd5()); } } }
用到的文件model
public class FileModel { public File file; public String md5; public FileModel(File file, String md5) { this.file = file; this.md5 = md5; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getMd5() { return md5; } public void setMd5(String md5) { this.md5 = md5; } }
相关文章推荐
- java找出两个文件之间不同的内容--该方法属于比较笨的方法
- Java 创建线程池两种不同方法的比较
- toCharArray()方法 和 Java中比较两个字符串是否相等equals方法
- Java 比较两个List的差异,并取出不同的对象
- Java比较两个数组中的元素是否相同的最简单方法
- 使用JAVA实现比较两个文件夹下的文件新增和修改情况,并复制到新的目录(实现增量更新项目)
- java 找出两个文件夹下所有的不同文件
- java比较两个对象是否相等的方法
- Java中两个对象的比较 equals()方法和==号的区别
- Java 多线程实现的三种方法,附两个线程执行不同的输出
- java中两个对象间的属性值复制,比较,转为map方法实现
- Java中遍历文件夹的2种方法的比较
- JAVA两个数组间元素的比较(找出相同或者不同元素)
- Java比较两个List的值是否相等的方法
- 通过java编写的可以比对两个文件夹的不同代码
- Java实现的比较两个不同的文本,在文本面板中显示不同文本的内容(完整源码)
- Java 创建线程池两种不同方法的比较
- Python实现比较两个文件夹中代码变化的方法
- Java对数组的操作(三)—比较两个数组中的元素是否相同的最简单方法
- php实现比较两个文件夹异同的方法