java解压多目录Zip文件(解决中文乱码问题)--转载

原文地址:http://zhangyongbo.iteye.com/blog/1749439

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/**
 *  解压Zip文件工具类
 * @author zhangyongbo
 *
 */
public class ZipUtil {

    private static final int buffer = 2048;

      public static void main(String[] args)
        {
            unZip("E:\java\Android\aaa.zip");
        }
    /**
     * 解压Zip文件
     * @param path 文件目录
     */
    public static void unZip(String path)
        {
         int count = -1;
         String savepath = "";

         File file = null;
         InputStream is = null;
         FileOutputStream fos = null;
         BufferedOutputStream bos = null;

         savepath = path.substring(0, path.lastIndexOf(".")) + File.separator; //保存解压文件目录
         new File(savepath).mkdir(); //创建保存目录
         ZipFile zipFile = null;
         try
         {
              zipFile = new ZipFile(path,"gbk"); //解决中文乱码问题
             Enumeration<?> entries = zipFile.getEntries();

             while(entries.hasMoreElements())
             {
                 byte buf[] = new byte[buffer];

                 ZipEntry entry = (ZipEntry)entries.nextElement();

                 String filename = entry.getName();
                 boolean ismkdir = false;
                 if(filename.lastIndexOf("/") != -1){ //检查此文件是否带有文件夹
                     ismkdir = true;
                 }
                 filename = savepath + filename;

                 if(entry.isDirectory()){ //如果是文件夹先创建
                     file = new File(filename);
                     file.mkdirs();
                      continue;
                 }
                 file = new File(filename);
                 if(!file.exists()){ //如果是目录先创建
                     if(ismkdir){
                     new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
                     }
                 }
                 file.createNewFile(); //创建文件

                 is = zipFile.getInputStream(entry);
                 fos = new FileOutputStream(file);
                 bos = new BufferedOutputStream(fos, buffer);

                 while((count = is.read(buf)) > -1)
                 {
                     bos.write(buf, 0, count);
                 }
                 bos.flush();
                 bos.close();
                 fos.close();

                 is.close();
             }

             zipFile.close();

         }catch(IOException ioe){
             ioe.printStackTrace();
         }finally{
                try{
                if(bos != null){
                    bos.close();
                }
                if(fos != null) {
                    fos.close();
                }
                if(is != null){
                    is.close();
                }
                if(zipFile != null){
                    zipFile.close();
                }
                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }
}

指定目录重新的方法如下:

    /**
     * 解压Zip文件
     * @param path 文件目录
     */
    public static void unZipNew(String path,String savepath)
        {
         int count = -1;

         File file = null;
         InputStream is = null;
         FileOutputStream fos = null;
         BufferedOutputStream bos = null;

         ZipFile zipFile = null;
         try
         {
              zipFile = new ZipFile(path,"gbk"); //解决中文乱码问题
             Enumeration<?> entries = zipFile.getEntries();

             while(entries.hasMoreElements())
             {
                 byte buf[] = new byte[buffer];

                 ZipEntry entry = (ZipEntry)entries.nextElement();

                 String filename = entry.getName();
                 boolean ismkdir = false;
                 if(filename.lastIndexOf("/") != -1){ //检查此文件是否带有文件夹
                     ismkdir = true;
                 }
                 filename = savepath + filename;

                 if(entry.isDirectory()){ //如果是文件夹先创建
                     file = new File(filename);
                     file.mkdirs();
                      continue;
                 }
                 file = new File(filename);
                 if(!file.exists()){ //如果是目录先创建
                     if(ismkdir){
                     new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
                     }
                 }
                 file.createNewFile(); //创建文件

                 is = zipFile.getInputStream(entry);
                 fos = new FileOutputStream(file);
                 bos = new BufferedOutputStream(fos, buffer);

                 while((count = is.read(buf)) > -1)
                 {
                     bos.write(buf, 0, count);
                 }
                 bos.flush();
                 bos.close();
                 fos.close();

                 is.close();
             }

             zipFile.close();

         }catch(IOException ioe){
             ioe.printStackTrace();
         }finally{
                try{
                if(bos != null){
                    bos.close();
                }
                if(fos != null) {
                    fos.close();
                }
                if(is != null){
                    is.close();
                }
                if(zipFile != null){
                    zipFile.close();
                }
                }catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }
原文地址:https://www.cnblogs.com/davidwang456/p/4841209.html