对比两个压缩包内文件,将不同的文件及文件夹单独移到一个新文件夹里

项目需要,要对比两个apk,看是否有新增文件,并列出。

个人写这个写了有段时间,如果不跟业务结合的话可能就不会写这么久了(感慨下,还是单纯的逻辑代码简单啊!)

上代码

private String testFile(String path1,String unzipPath1,String path2,String unzipPath2,String newUnzipPath) throws Exception{
    long l = System.currentTimeMillis();
    //将压缩包分别解压
    ZipUtils.unZip(path1, unzipPath1);
    ZipUtils.unZip(path2, unzipPath2);
    File f1 = new File(unzipPath1);
    File f2 = new File(unzipPath2);
    File newF=new File(newUnzipPath);
    newF.mkdirs();
    //获取解压后路径下的全部文件及文件夹
    Set<String> fileList1 = getAllFile(f1, unzipPath1);
    Set<String> fileList2 = getAllFile(f2, unzipPath2);
    Set<String> newfilelist = new HashSet<>();
    for (String p : fileList2) {
      if (fileList1.add(p)) {
        newfilelist.add(p);
      }
    }
    //不同文件及文件夹复制
    for (String p : newfilelist) {
      String oldp=unzipPath2+p;
      p = newUnzipPath + p;
      File file = new File(p);
      file.getParentFile().mkdirs();
      file.createNewFile();
      FileUtils.copyFile(new File(oldp),file);
    }
    long l2 = System.currentTimeMillis();
    System.out.println("文件对比耗时(秒):"+(l2 - l) / 1000);
    if (newfilelist.size() > 0) {
      return newUnzipPath;
    } else {
      return null;
    }
  }

  private static Set<String> getAllFile(File f,String rootPath){
    Set<String> filseList=new HashSet<>();
    File[] files=f.listFiles();
    for(int i=0;i<files.length;i++){
      File ff=files[i];
      if(ff.isDirectory()){
        filseList.addAll(getAllFile(ff,rootPath));
      }else{
        filseList.add(ff.getAbsolutePath().replace(rootPath,""));
      }
    }
    return filseList;
  }

path1:压缩包1所在路径

unzipPath1:压缩包1要解压到的路径

paht2:压缩包2所在路径

unzipPath2:压缩包2要解压到的路径

newzipPath:不同文件及文件夹存放路径

该方法对比的是压缩包2相对于压缩包1不同的文件,在我的项目中主要是用来对比新版本的apk相对于旧版本的apk有什么新增的文件。(当时在网上找了找,发现并没有现成的轮子可以用,所以我就把我造好的轮子发出来供大家使用,批判。水平有限,有可以优化改进的地方,欢迎大家畅所欲言)

原文地址:https://www.cnblogs.com/bailongshou/p/10947850.html

时间: 2024-10-09 20:32:09

对比两个压缩包内文件,将不同的文件及文件夹单独移到一个新文件夹里的相关文章

Linux基础概念-----touch一个新文件背后发生的事情

一个普通用户在Shell下执行了一条命令,这背后发生了什么事情,是个人的一些总结,如果有不对的地方欢迎搭建指正,谢谢! touch /tmp/test.txt ####################################################################################### tom在Shell中执行这条命令,Shell将命令发给内核,并且判断命令是否存在,通过文件系统上的元数据判断tom是否有权限执行,内核从内存中加载出mkdir的指令

svn 单独导出某一个目录文件

应需求,需要把svn版本库的某一个目录导出来,迁成另外一个库,查了下svn相关命令,可以使用svndumpfilter. 示例:svndumpfilter include /trunk/system < full_system_0_158_201407270000.dmp > /tmp/system.dmp 注意,在回导的时候,如果提示目录不存在,需要建立相应的目录在进行导入. svn 单独导出某一个目录文件

C#控制台基础 directory创建一个新文件夹

1 代码 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace directory创建一个文件夹 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14

面试官:请你实现一个大文件上传和断点续传

前言这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding 的编程题,当时虽然思路正确,可惜最终也并不算完全答对 结束后花了一段时间整理了下思路,那么究竟该如何实现一个大文件上传,以及在上传中如何实现断点续传的功能呢? 本文将从零搭建前端和服务端,实现一个大文件上传和断点续传的 demo 文章有误解的地方,欢迎指出,将在第一时间改正,有更好的实现方式希望留下你

linux的tar命令详情;linux多个文件压缩打包到一个压缩文件

tar命令 可以用来压缩打包单文件.多个文件.单个目录.多个目录. Linux打包命令_tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包 tar czvf my.tar.gz file1 多个文件压缩打包 tar czvf my.tar.gz file1 file2,...(file*)(也可以给file*文件mv 目录在压缩) 单个目录压缩打包 tar czvf my.tar.gz dir1 多个目录压缩打包 tar czvf my.tar

如何将一个文件夹复制到另一个文件夹中并保留其权限

概要 本文分步介绍了如何将一个文件夹复制到另一个文件夹中并保留其权限.   当您使用 Windows Explorer 复制或移动文件和文件夹时,在这些文件或文件夹上设置的权限可能会发生改变.例如,当您在一个 NTFS 文件系统卷内或在两个 NTFS 卷之间复制一个文件时,Windows 2000 将把它当作一个新文件.作为一个新文件,它将具有目标文件夹的权限,您将成为"创建者所有者".    注意:您必须对目标文件夹具有"写"权限才能复制文件和文件夹.    可以

把多个Excel文件合并到一个Excel文件的多个工作表(Sheet)里

实现的功能是把多个Excel文件的第一个工作表(Sheet)合并到一个Excel文件的多个工作表里,并且新工作表的名称等于原Excel文件的文件名.开发环境Excel2007,但是Excel2003应该也能用,Excel2000似乎不能用.代码如下: '功能:把多个工作簿的第一个工作表合并到一个工作簿的多个工作表,新工作表的名称等于原工作簿的名称 新建的excel新表---书签sheet1--右击查看代码-复制代码进入---运行-选择需要合并的表--OKSub Books2Sheets()   

让sublime总是在新选项卡打开新文件

sublime的一个默认设置让人很不爽,比如现在选项卡里面已经打开了一个文件A,当你从左边side bar里面点击一个新文件B时,如果你不是快速的双击,且A没有处于编辑未保存状态,那么B就会覆盖A的选项卡,而不是在新选项卡中打开. 而我绝大多数都是希望在新选项卡中打开新文件的,经常需要来回比较和修改多个文件,有时候稍微双击慢了一点点,一个文件就被覆盖了,不得不又费劲重新打开(而这又要面临快速双击的考验).真是让人抓狂. 幸运的是,找到解决办法了: preferences ->settings-u

sublime text 3创建新文件插件-AdvanceNewFile

这里要记录sublime text 3 在创建新文件时安装的插件–AdvanceNewFile ST本来自带的创建新文件的快捷键是ctrl+n.但是用户需要保存时才可修改名称以及文件路径.但是安装完AdvanceNewFile插件后,一切都会变得相当容易. 依旧在 package control 中选择 package control install.然后输入AdvanceNewFile,点击安装.知道出现如下界面,证明安装完成. 测试: 按着ctrl+alt+n ,下方会出现一个填写路径的框,