Java操作zip压缩和解压缩文件工具类详解编程语言

需要用到ant.jar(这里使用的是ant-1.6.5.jar)

  1 import java.io.File; 
  2 import java.io.FileInputStream; 
  3 import java.io.FileNotFoundException; 
  4 import java.io.FileOutputStream; 
  5 import java.io.IOException; 
  6 import java.io.InputStream; 
  7 import java.io.OutputStream; 
  8 import java.util.ArrayList; 
  9 import java.util.Enumeration; 
 10 import java.util.List; 
 11  
 12 import org.apache.tools.zip.ZipEntry; 
 13 import org.apache.tools.zip.ZipFile; 
 14 import org.apache.tools.zip.ZipOutputStream; 
 15  
 16  
 17 /** 
 18  * 压缩或解压zip: 
 19  * 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类 
 20  * @author Administrator 
 21  */ 
 22  
 23 public class ZipUtil { 
 24     private static byte[] _byte = new byte[1024] ; 
 25     /** 
 26      * 压缩文件或路径 
 27      * @param zip 压缩的目的地址 
 28      * @param srcFiles 压缩的源文件 
 29      */ 
 30     public static void zipFile( String zip , List<File> srcFiles ){ 
 31         try { 
 32             if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){ 
 33                 ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(new File(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      * @param zip 压缩的目的地址 
 50      * @param zipOut  
 51      * @param srcFile  被压缩的文件信息 
 52      * @param path  在zip中的相对路径 
 53      * @throws IOException 
 54      */ 
 55     private static void handlerFile(String zip , ZipOutputStream zipOut , File srcFile , String path ) throws IOException{ 
 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 = new FileInputStream(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      * @param zipName 待解压缩的ZIP文件名 
 87      * @param targetBaseDirName  目标目录 
 88      */ 
 89     public static List<File> upzipFile(String zipPath, String descDir) { 
 90         return upzipFile( new File(zipPath) , descDir ) ; 
 91     } 
 92      
 93     /** 
 94      * 对.zip文件进行解压缩 
 95      * @param zipFile  解压缩文件 
 96      * @param descDir  压缩的目标地址,如:D://测试 或 /mnt/d/测试 
 97      * @return 
 98      */ 
 99     @SuppressWarnings("rawtypes") 
100     public static List<File> upzipFile(File zipFile, String descDir) { 
101         List<File> _list = new ArrayList<File>() ; 
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 = new FileOutputStream(_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 void deletefile(String delpath) { 
135         try { 
136             File file = new File(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 void main(String[] args) {} 
157      
158 }

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15783.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论