java 解压缩Zip文件

本文介绍了一个使用Java实现的解压ZIP文件的工具类。该工具可以读取ZIP压缩包中的文件并将其解压到指定目录,同时解决了中文文件名乱码的问题。文章提供了完整的代码示例,并展示了如何使用该工具类进行解压操作。
摘要由CSDN通过智能技术生成

jar依赖:

<dependency>
    <groupId>org.apache.ant</groupId>
    <artifactId>ant</artifactId>
    <version>1.9.9</version>
</dependency>
代码:

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("D:\\test.zip");
      String f = "D:\\test.csv";
      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]);
         }
      }
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值