1 importjava.io.File;2 importjava.io.FileInputStream;3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5 importjava.io.IOException;6 importjava.io.InputStream;7 importjava.io.OutputStream;8 importjava.util.ArrayList;9 importjava.util.Enumeration;10 importjava.util.List;11
12 importorg.apache.tools.zip.ZipEntry;13 importorg.apache.tools.zip.ZipFile;14 importorg.apache.tools.zip.ZipOutputStream;15
16
17 /**
18 * 压缩或解压zip:19 * 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类20 *@authorAdministrator21 */
22
23 public classZipUtil {24 private static byte[] _byte = new byte[1024] ;25 /**
26 * 压缩文件或路径27 *@paramzip 压缩的目的地址28 *@paramsrcFiles 压缩的源文件29 */
30 public static void zipFile( String zip , ListsrcFiles ){31 try{32 if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){33 ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(newFile(zip))) ;34 _zipOut.setEncoding("GBK");35 for( File _f : srcFiles ){36 handlerFile(zip , _zipOut , _f , "");37 }38 _zipOut.close();39 }else{40 System.out.println("target file[" + zip + "] is not .zip type file");41 }42 } catch(FileNotFoundException e) {43 } catch(IOException e) {44 }45 }46
47 /**
48 *49 *@paramzip 压缩的目的地址50 *@paramzipOut51 *@paramsrcFile 被压缩的文件信息52 *@parampath 在zip中的相对路径53 *@throwsIOException54 */
55 private static void handlerFile(String zip , ZipOutputStream zipOut , File srcFile , String path ) throwsIOException{56 System.out.println(" begin to compression file[" + srcFile.getName() + "]");57 if( !"".equals(path) && !path.endsWith(File.separator)){58 path +=File.separator ;59 }60 if( !srcFile.getPath().equals(zip) ){61 if( srcFile.isDirectory() ){62 File[] _files =srcFile.listFiles() ;63 if( _files.length == 0){64 zipOut.putNextEntry(new ZipEntry( path + srcFile.getName() +File.separator));65 zipOut.closeEntry();66 }else{67 for( File _f : _files ){68 handlerFile( zip ,zipOut , _f , path +srcFile.getName() );69 }70 }71 }else{72 InputStream _in = newFileInputStream(srcFile) ;73 zipOut.putNextEntry(new ZipEntry(path +srcFile.getName()));74 int len = 0;75 while( (len = _in.read(_byte)) > 0){76 zipOut.write(_byte, 0, len);77 }78 _in.close();79 zipOut.closeEntry();80 }81 }82 }83
84 /**
85 * 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下86 *@paramzipName 待解压缩的ZIP文件名87 *@paramtargetBaseDirName 目标目录88 */
89 public static ListupzipFile(String zipPath, String descDir) {90 return upzipFile( newFile(zipPath) , descDir ) ;91 }92
93 /**
94 * 对.zip文件进行解压缩95 *@paramzipFile 解压缩文件96 *@paramdescDir 压缩的目标地址,如:D:\\测试 或 /mnt/d/测试97 *@return
98 */
99 @SuppressWarnings("rawtypes")100 public static ListupzipFile(File zipFile, String descDir) {101 List _list = new ArrayList() ;102 try{103 ZipFile _zipFile = new ZipFile(zipFile , "GBK") ;104 for( Enumeration entries =_zipFile.getEntries() ; entries.hasMoreElements() ; ){105 ZipEntry entry =(ZipEntry)entries.nextElement() ;106 File _file = new File(descDir + File.separator +entry.getName()) ;107 if( entry.isDirectory() ){108 _file.mkdirs() ;109 }else{110 File _parent =_file.getParentFile() ;111 if( !_parent.exists() ){112 _parent.mkdirs() ;113 }114 InputStream _in =_zipFile.getInputStream(entry);115 OutputStream _out = newFileOutputStream(_file) ;116 int len = 0;117 while( (len = _in.read(_byte)) > 0){118 _out.write(_byte, 0, len);119 }120 _in.close();121 _out.flush();122 _out.close();123 _list.add(_file) ;124 }125 }126 } catch(IOException e) {127 }128 return_list ;129 }130
131 /**
132 * 对临时生成的文件夹和文件夹下的文件进行删除133 */
134 public static voiddeletefile(String delpath) {135 try{136 File file = newFile(delpath);137 if (!file.isDirectory()) {138 file.delete();139 } else if(file.isDirectory()) {140 String[] filelist =file.list();141 for (int i = 0; i < filelist.length; i++) {142 File delfile = new File(delpath + File.separator +filelist[i]);143 if (!delfile.isDirectory()) {144 delfile.delete();145 } else if(delfile.isDirectory()) {146 deletefile(delpath + File.separator +filelist[i]);147 }148 }149 file.delete();150 }151 } catch(Exception e) {152 e.printStackTrace();153 }154 }155
156 public static voidmain(String[] args) {}157
158 }