文件解压及打包 并解决中文乱码问题

来源:互联网 发布:js 去掉数组重复元素 编辑:程序博客网 时间:2024/06/14 00:20
  1. package zipFile;    
  2.   
  3. import java.io.File;    
  4. import java.io.FileInputStream;    
  5. import java.io.FileOutputStream;    
  6. import java.io.IOException;    
  7. import java.io.InputStream;    
  8. import java.util.zip.ZipEntry;    
  9. import java.util.zip.ZipException;    
  10. import java.util.zip.ZipInputStream;    
  11.   
  12. public  class  ZipFileUtil  {    
  13. /*   
  14. * 能支持中文的压缩   
  15. * 参数base 开始为""   
  16. * first 开始为true   
  17. */    
  18.     public static void zip(org.apache.tools.zip.ZipOutputStream out, File f, String base,boolean first) throws Exception {    
  19.         if(first){    
  20.         if(f.isDirectory()){    
  21.         out.putNextEntry(new org.apache.tools.zip.ZipEntry("/"));    
  22.         base = base +f.getName();    
  23.         first = false;    
  24.         }    
  25.         else    
  26.         base = f.getName();    
  27.         }    
  28.     if (f.isDirectory()) {    
  29.           File[] fl = f.listFiles();    
  30.           base = base +"/";    
  31.           for (int i = 0; i < fl.length; i++) {    
  32.           zip(out, fl[i], base + fl[i].getName(),first);    
  33.         }    
  34.         }else {    
  35.           out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));    
  36.           FileInputStream in = new FileInputStream(f);    
  37.           int b;    
  38.           System.out.println(base);    
  39.           while ( (b = in.read()) != -1) {    
  40.             out.write(b);    
  41.         }    
  42.         in.close();    
  43.       }    
  44.     }    
  45.     /*   
  46.     * 解压文件   
  47.     * unZip为解压路径   
  48.     */    
  49.     public static void unZipFileByOpache(org.apache.tools.zip.ZipFile zipFile,String unZipRoot) throws Exception, IOException{    
  50.       java.util.Enumeration e = zipFile.getEntries();    
  51.       org.apache.tools.zip.ZipEntry zipEntry;    
  52.       while(e.hasMoreElements()){    
  53.       zipEntry = (org.apache.tools.zip.ZipEntry)e.nextElement();    
  54.       InputStream fis = zipFile.getInputStream(zipEntry);    
  55.       if(zipEntry.isDirectory()){    
  56.       }    
  57.       else{    
  58.     File file = new File(unZipRoot+File.separator+zipEntry.getName());    
  59.     File parentFile = file.getParentFile();    
  60.     parentFile.mkdirs();    
  61.     FileOutputStream fos = new FileOutputStream(file);    
  62.     byte[] b = new byte[1024];    
  63.     int len;    
  64.     while((len=fis.read(b, 0, b.length))!=-1){    
  65.     fos.write(b, 0, len);    
  66.     }    
  67.     fos.close();    
  68.     fis.close();    
  69.       }    
  70.       }    
  71.     }    
  72.        
  73.     public static void ZipFile(String zipFileName,String inputFileName) throws Exception{    
  74.     org.apache.tools.zip.ZipOutputStream out = new org.apache.tools.zip.ZipOutputStream(new FileOutputStream(zipFileName));    
  75.         File inputFile = new File(inputFileName);    
  76.     zip(out, inputFile, "",true);    
  77.         System.out.println("zip done");    
  78.         out.close();    
  79.     }    
  80.        
  81.     public static void unZipFile(String unZipFileName,String unZipPath) throws Exception{    
  82.     org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(unZipFileName);    
  83.     unZipFileByOpache(zipFile, unZipPath);    
  84.     System.out.println("unZip Ok");    
  85.     }    
  86.        
  87.     public static void main(String[] args) throws Exception {    
  88.     ZipFile("d:/TEsT.zip","d:/test");    
  89.     // unZipFile("D:/File.zip","D:/");    
  90. }    
  91. }