1 packagecom.svse.test;2 importjava.io.File;3 importjava.io.FileOutputStream;4 importjava.io.IOException;5 importjava.io.InputStream;6 importjava.io.OutputStream;7 importjava.util.Enumeration;8 importorg.apache.tools.zip.ZipEntry;9 importorg.apache.tools.zip.ZipFile;10 importde.innosystec.unrar.Archive;11 importde.innosystec.unrar.rarfile.FileHeader;12 /**
13 * zip和rar解压缩工具类14 *@authorlenovo15 *16 */
17 public classZipAndRarTools {18 /**
19 * 解压rar20 *@paramsourceRarPath 需要解压的rar文件全路径21 *@paramdestDirPath 需要解压到的文件目录22 *@throwsException23 */
24 public static void unrar(String sourceRarPath, String destDirPath) throwsException {25 File sourceRar=newFile(sourceRarPath);26 File destDir=newFile(destDirPath);27 Archive archive = null;28 FileOutputStream fos = null;29 System.out.println("Starting 开始解压...");30 try{31 archive = newArchive(sourceRar);32 FileHeader fh =archive.nextFileHeader();33 int count = 0;34 File destFileName = null;35 while (fh != null) {36 System.out.println((++count) + ") " +fh.getFileNameString());37 String compressFileName =fh.getFileNameString().trim();38 destFileName = new File(destDir.getAbsolutePath() + "/" +compressFileName);39 if(fh.isDirectory()) {40 if (!destFileName.exists()) {41 destFileName.mkdirs();42 }43 fh =archive.nextFileHeader();44 continue;45 }46 if (!destFileName.getParentFile().exists()) {47 destFileName.getParentFile().mkdirs();48 }49
50 fos = newFileOutputStream(destFileName);51 archive.extractFile(fh, fos);52 fos.close();53 fos = null;54 fh =archive.nextFileHeader();55 }56
57 archive.close();58 archive = null;59 System.out.println("Finished 解压完成!");60 } catch(Exception e) {61 throwe;62 } finally{63 if (fos != null) {64 try{65 fos.close();66 fos = null;67 } catch(Exception e) {68 }69 }70 if (archive != null) {71 try{72 archive.close();73 archive = null;74 } catch(Exception e) {75 }76 }77 }78 }79
80
81 /**
82 * 解压Zip文件83 *@paramzipFileName 需要解压缩的文件位置84 *@paramdescFileName 将文件解压到某个路径85 *@throwsIOException86 */
87 public static void unZip(String zipFileName,String descFileName) throwsIOException{88 System.out.println("文件解压开始...");89 String descFileNames=descFileName;90 if(!descFileNames.endsWith(File.separator)){91 descFileNames=descFileNames+File.separator;92 }93 try{94 ZipFile zipFile=newZipFile(zipFileName);95 ZipEntry entry=null;96 String entryName=null;97 String descFileDir=null;98 byte[] buf=new byte[4096];99 int readByte=0;100 @SuppressWarnings("rawtypes")101 Enumeration enums=zipFile.getEntries();102 while(enums.hasMoreElements()){103 entry =(ZipEntry) enums.nextElement();104 entryName=entry.getName();105 descFileDir=descFileNames+entryName;106 if(entry.isDirectory()){107 newFile(descFileDir).mkdir();108 continue;109 }else{110 newFile(descFileDir).getParentFile().mkdir();111 }112 File file=newFile(descFileDir);113 OutputStream os=newFileOutputStream(file);114 InputStream is=zipFile.getInputStream(entry);115 while((readByte=is.read(buf))!=-1){116 os.write(buf, 0, readByte);117 }118 os.close();119 is.close();120 }121 zipFile.close();122 System.out.println("文件解压成功!");123 } catch(Exception e) {124 System.out.println("文件解压失败!");125 e.printStackTrace();126 }127
128 }129
130 public static void main(String[] args) throwsException {131 //ZipAndRarTools.unrar(newFile("D:\\存放资料的压缩包\\员工材料.rar"),newFile("D:\\存放资料的非压缩包\\"));
132
133 ZipAndRarTools.unZip("D:\\rarTest\\jar包和配置文件资源.zip", "D:\\rarTest");134 ZipAndRarTools.unrar("D:\\rarTest\\rar压缩包.rar", "D:\\rarTest");135
136 }137 }