码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-30 10:40:26      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:sel   时间   方法   mem   list   turn   ash   apk   put   

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

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

标签:sel   时间   方法   mem   list   turn   ash   apk   put   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!