• Java实现解压zip


    方式一:

    package com.lanyuan.assembly.util;
    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; 
     /** 
      * 解压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(); 
           } 
         } 
       } 
    /*public static void main(String[] args) 
      { 
        unZip("F:\110000002.zip"); 
        String f = "F:\110000002";
        File file = new File(f);
        String[] test=file.list();
        for(int i=0;i<test.length;i++){
          System.out.println(test[i]);
        }
        System.out.println("------------------");
        String fileName = "";
        File[] tempList = file.listFiles();
        for (int i = 0; i < tempList.length; i++) {
          if (tempList[i].isFile()) {
            System.out.println("文   件:"+tempList[i]);
            fileName = tempList[i].getName();
            System.out.println("文件名:"+fileName);
          }
          if (tempList[i].isDirectory()) {
            System.out.println("文件夹:"+tempList[i]);
          }
        }
      } */
    }

    方式二:

    import java.io.*;
    import java.nio.charset.Charset;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    /**
     * Created by wzj on 2016/9/9.
     */
    public class UZipFile
    {
      /**
       * 解压到指定目录
       */
      public static void unZipFiles(String zipPath,String descDir)throws IOException
      {
        unZipFiles(new File(zipPath), descDir);
      }
      /**
       * 解压文件到指定目录
       */
      @SuppressWarnings("rawtypes")
      public static void unZipFiles(File zipFile,String descDir)throws IOException
      {
        File pathFile = new File(descDir);
        if(!pathFile.exists())
        {
          pathFile.mkdirs();
        }
        //解决zip文件中有中文目录或者中文文件
        ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));
        for(Enumeration entries = zip.entries(); entries.hasMoreElements();)
        {
          ZipEntry entry = (ZipEntry)entries.nextElement();
          String zipEntryName = entry.getName();
          InputStream in = zip.getInputStream(entry);
          String outPath = (descDir+zipEntryName).replaceAll("\*", "/");;
          //判断路径是否存在,不存在则创建文件路径
          File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
          if(!file.exists())
          {
            file.mkdirs();
          }
          //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
          if(new File(outPath).isDirectory())
          {
            continue;
          }
          //输出文件路径信息
          System.out.println(outPath);
          OutputStream out = new FileOutputStream(outPath);
          byte[] buf1 = new byte[1024];
          int len;
          while((len=in.read(buf1))>0)
          {
            out.write(buf1,0,len);
          }
          in.close();
          out.close();
        }
        System.out.println("******************解压完毕********************");
      }
      public static void main(String[] args) throws IOException {
        /**
         * 解压文件
         */
        File zipFile = new File("d:/资料.zip");
        String path = "d:/zipfile/";
        unZipFiles(zipFile, path);
      }
    }

    转载自:https://www.jb51.net/article/127844.htm

  • 相关阅读:
    组合数学练习
    floyd算法新理解
    图论练习
    GDOI2021 day2总结
    P3190 [HNOI2007]神奇游乐园
    P1932 A+B A-B A*B A/B A%B Problem
    P2289 [HNOI2004]邮递员
    P5056 【模板】插头dp
    P4323 [JSOI2016]独特的树叶
    CF1153D Serval and Rooted Tree
  • 原文地址:https://www.cnblogs.com/scorates/p/11660303.html
Copyright © 2020-2023  润新知