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

Posted bailongshou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对比两个压缩包内文件,将不同的文件及文件夹单独移到一个新文件夹里相关的知识,希望对你有一定的参考价值。

项目需要,要对比两个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有什么新增的文件。(当时在网上找了找,发现并没有现成的轮子可以用,所以我就把我造好的轮子发出来供大家使用,批判。水平有限,有可以优化改进的地方,欢迎大家畅所欲言)

以上是关于对比两个压缩包内文件,将不同的文件及文件夹单独移到一个新文件夹里的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu下压缩包内文件解压后乱码问题的解决

如何用SAS读取压缩包内的文件或是自动解压文件

如何从包内的两个不同文件夹中导入一个模块,该模块导入另一个模块

hive使用parquet及压缩数据大小前后对比

C#ZIP根据路径读取压缩包内文件数量

zip 压缩文件 unzip查看zip压缩包内的内容