用java解压缩zip和rar的工具类
package decompress;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;public class DeCompressUtil {/** * 解压zip格式压缩包 * 对应的是ant.jar */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格式压缩包。 * 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar */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 和 destFileNameString compressFileName = fh.getFileNameString().trim();String destFileName = "";String destDirName = "";//非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();}}}}/** * 解压缩 */public static void deCompress(String sourceFile,String destDir) throws Exception{//保证文件夹路径最后是"/"或者""char lastChar = destDir.charAt(destDir.length()-1);if(lastChar!='/'&&lastChar!='\\'){destDir += File.separator;}//根据类型,进行相应的解压缩String type = sourceFile.substring(sourceFile.lastIndexOf(".")+1);if(type.equals("zip")){DeCompressUtil.unzip(sourceFile, destDir);}else if(type.equals("rar")){DeCompressUtil.unrar(sourceFile, destDir);}else{throw new Exception("只支持zip和rar格式的压缩包!");}}}1 楼 shiz25 2011-10-19 找了好久,才找到 ,谢谢! 2 楼 hoyzhang 2012-06-13 纯java解压rar,支持密码