zoukankan      html  css  js  c++  java
  • 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();
                    }
                }
            }
  • 相关阅读:
    Spring 事务XML配置
    启用事务注解
    ebay 店铺状态
    lambda Map Reduce
    sublime3注册码
    使用多线程
    Spring AOP学习(六)
    添加依赖库
    CodeForces 867B Save the problem
    POJ 3264 Balanced Lineup (线段树查找最大最小值)
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4841209.html
Copyright © 2011-2022 走看看