• 技术文章 >Java >java教程

    Java压缩解压zip技术之动力节点的详解(图)

    黄舟黄舟2017-05-21 10:23:38原创788
    Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。压缩方法使用的是可变参数,可以压缩1到多个文件

    Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面...

     ZipFiles(zip,"abc",new File("d:/English"),new File("d:/发放数据.xls"));

    测试文件目录结构

    //m.sbmmt.com/img/upload/article/000/000/194/5a48c99a6ba91987c8371bda56a85a9f-0.png

    测试的压缩内容:English文件夹和同级的两个excel文件

     File[] files = new File[]{new File("d:/English"),new File("d:/发放数据.xls"),new File("d:/中文名称.xls")};

    下面是压缩的代码:

     /** 
      * 压缩文件-由于out要在递归调用外,所以封装一个方法用来 
      * 调用ZipFiles(ZipOutputStream out,String path,File... srcFiles) 
      * @param zip 
      * @param path 
      * @param srcFiles 
      * @throws IOException 
      * 
      */ 
      public static void ZipFiles(File zip,String path,File... srcFiles) throws IOException{ 
       ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip)); 
       ZipTest.ZipFiles(out,path,srcFiles); 
       out.close(); 
       System.out.println("*****************压缩完毕*******************"); 
      } 
      /** 
      * 压缩文件-File 
      * @param zipFile zip文件 
      * @param srcFiles 被压缩源文件 
      * 
      */ 
      public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){ 
       path = path.replaceAll("\\*", "/"); 
       if(!path.endsWith("/")){ 
        path+="/"; 
       } 
       byte[] buf = new byte[1024]; 
       try { 
        for(int i=0;i<srcFiles.length;i++){ 
         if(srcFiles[i].isDirectory()){ 
          File[] files = srcFiles[i].listFiles(); 
          String srcPath = srcFiles[i].getName(); 
          srcPath = srcPath.replaceAll("\\*", "/"); 
          if(!srcPath.endsWith("/")){ 
           srcPath+="/"; 
          } 
          out.putNextEntry(new ZipEntry(path+srcPath)); 
         ZipFiles(out,path+srcPath,files); 
         } 
         else{ 
          FileInputStream in = new FileInputStream(srcFiles[i]); 
          System.out.println(path + srcFiles[i].getName()); 
          out.putNextEntry(new ZipEntry(path + srcFiles[i].getName())); 
          int len; 
          while((len=in.read(buf))>0){ 
           out.write(buf,0,len); 
          } 
          out.closeEntry(); 
          in.close(); 
         } 
       } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
     }

    在压缩的时候,针对文件夹进行判断,然后递归压缩文件。

    然后是解压:

    /** 
      * 解压到指定目录 
      * @param zipPath 
      * @param descDir 
      * 
      */ 
      public static void unZipFiles(String zipPath,String descDir)throws IOException{ 
       unZipFiles(new File(zipPath), descDir); 
      } 
      /** 
      * 解压文件到指定目录 
      * @param zipFile 
      * @param descDir 
      * 
      */ 
      @SuppressWarnings("rawtypes") 
      public static void unZipFiles(File zipFile,String descDir)throws IOException{ 
       File pathFile = new File(descDir); 
       if(!pathFile.exists()){ 
        pathFile.mkdirs(); 
       } 
      ZipFile zip = new ZipFile(zipFile); 
       for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){ 
        ZipEntry entry = (ZipEntry)entries.nextElement(); 
        String zipEntryName = entry.getName(); 
        InputStream in = zip.getInputStream(entry); 
        String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");; 
        //判断路径是否存在,不存在则创建文件路径 
        File file = new File(outPath.substring(0, outPath.lastIndexOf('/'))); 
        if(!file.exists()){ 
         file.mkdirs(); 
        } 
        //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 
        if(new File(outPath).isDirectory()){ 
         continue; 
        } 
        //输出文件路径信息 
        System.out.println(outPath); 
        
        OutputStream out = new FileOutputStream(outPath); 
        byte[] buf1 = new byte[1024]; 
        int len; 
        while((len=in.read(buf1))>0){ 
         out.write(buf1,0,len); 
        } 
        in.close(); 
        out.close(); 
        } 
       System.out.println("******************解压完毕********************"); 
      }

    解压的时候,针对文件夹判断创建不存在的文件夹,对文件夹只创建,不进行解压..因为解压是针对文件的,不是文件夹,文件夹需要自己创建。

    测试方法:

     public static void main(String[] args) throws IOException { 
       /** 
       * 压缩文件 
       */ 
       File[] files = new File[]{new File("d:/English"),new File("d:/发放数据.xls"),new File("d:/中文名称.xls")}; 
       File zip = new File("d:/压缩.zip"); 
       ZipFiles(zip,"abc",files); 
       
       /** 
       * 解压文件 
       */ 
       File zipFile = new File("d:/压缩.zip"); 
       String path = "d:/zipfile/"; 
       unZipFiles(zipFile, path); 
      }

    测试方法并没有对异常做任何处理,这是不对的,请不要模仿。

    输出结果:

     abc/English/templete.xls 
     abc/English/中文/bjpowernode/isea/533/abc/templete.xls 
     abc/English/中文/bjpowernode/isea/533/abc/zipfile2/templete.xls 
     abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/templete.xls 
     abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls 
     abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/领卡清单.xls 
     abc/English/中文/bjpowernode/isea/533/abc/zipfile2/领卡清单.xls 
     abc/English/中文/bjpowernode/isea/templete.xls 
     abc/English/中文/bjpowernode/isea/领卡清单.xls 
     abc/English/中文/bjpowernode/templete.xls 
     abc/English/领卡清单.xls 
     abc/发放数据.xls 
     abc/中文名称.xls 
     *****************压缩完毕******************* 
     d:/zipfile/abc/中文名称.xls 
     d:/zipfile/abc/发放数据.xls 
     d:/zipfile/abc/English/领卡清单.xls 
     d:/zipfile/abc/English/中文/bjpowernode/templete.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/领卡清单.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/templete.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/templete.xls 
     d:/zipfile/abc/English/templete.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/templete.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/templete.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/领卡清单.xls 
     d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/领卡清单.xls 
     ******************解压完毕********************

    //m.sbmmt.com/img/upload/article/000/000/194/7d3a3909f3632bbd8ec1265ecfdd65c1-1.png

    以上就是Java压缩解压zip技术之动力节点的详解(图)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:java算法中的关于二分查找和折半查找的实例详解 下一篇:Java线程中的生命周期和状态控制图文详解
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网