博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java进阶篇-解压缩zip rar文件
阅读量:5293 次
发布时间:2019-06-14

本文共 3302 字,大约阅读时间需要 11 分钟。

package com.cn.teachmobile.utils;import java.io.File;import java.io.FileOutputStream;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.Expand;import de.innosystec.unrar.Archive;import de.innosystec.unrar.rarfile.FileHeader;/** * @author gongchaobin * * 解压缩zip rar文件 */public class ZipHelper {   /**    * 解压zip文件    *     * @param sourceZip 需要解压的文件路径    * @param destDir 解压存放的路径    * @throws Exception    */   private static void unzip(String sourceZip,String destDir) throws Exception{          try{              Project p = new Project();              Expand e = new Expand();              e.setProject(p);              e.setSrc(new File(sourceZip));              e.setOverwrite(false);              e.setDest(new File(destDir));              /*             ant下的zip工具默认压缩编码为UTF-8编码,                而winRAR软件压缩是用的windows默认的GBK或者GB2312编码                 所以解压缩时要制定编码格式             */             e.setEncoding("gbk");              e.execute();          }catch(Exception e){              throw e;          }      }      /**    * 解压rar文件    *     * @param sourceRar    * @param destDir    * @throws Exception    */   private static void unrar(String sourceRar,String destDir) throws Exception{          Archive a = null;          FileOutputStream fos = null;          try{              a = new Archive(new File(sourceRar));              FileHeader fh = a.nextFileHeader();              while(fh!=null){                  if(!fh.isDirectory()){                      //1 根据不同的操作系统拿到相应的 destDirName 和 destFileName                      String compressFileName = fh.getFileNameString().trim();                      String destFileName = "";                      String destDirName = "";                      compressFileName = new String(compressFileName.getBytes("UTF-8"),"GB2312");                   //非windows系统                      if(File.separator.equals("/")){                          destFileName = destDir + compressFileName.replaceAll("\\\\", "/");                          destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));                      //windows系统                       }else{                          destFileName = destDir + compressFileName.replaceAll("/", "\\\\");                          destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));                      }                      //2创建文件夹                      File dir = new File(destDirName);                      if(!dir.exists()||!dir.isDirectory()){                          dir.mkdirs();                      }                      //3解压缩文件                      fos = new FileOutputStream(new File(destFileName));                      a.extractFile(fh, fos);                      fos.close();                   fos = null;               }                  fh = a.nextFileHeader();              }              a.close();              a = null;          }catch(Exception e){              throw e;          }finally{              if(fos!=null){                  try{fos.close();fos=null;}catch(Exception e){e.printStackTrace();}              }              if(a!=null){                  try{a.close();a=null;}catch(Exception e){e.printStackTrace();}              }          }      }   }

三个包的下载链接:

转载于:https://www.cnblogs.com/gongcb/archive/2012/10/15/2724035.html

你可能感兴趣的文章
Spark基础脚本入门实践3:Pair RDD开发
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
统计单词,字符,和行
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>
使用gitbash来链接mysql
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
C#基础_注释和VS常用快捷键(一)
查看>>