Zip解压工具类

本文深入探讨了解压工具类的实现原理与使用方法,包括如何通过Java实现解压功能,详细解析了解压过程中的关键步骤,并提供了一个实际的示例代码。文章还讨论了解压过程中可能遇到的问题及解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.log4j.Logger;

/**
 * <p>
 * Title: 解压工具类
 * </p>
 * <p>
 * Description: 解压工具类
 * </p>
 */
public class UnzipUtil {
 private static Logger log = Logger.getLogger(UnzipUtil.class);
    public UnzipUtil() {
    }

    public static boolean UnZip(String pStrZipPathName,
                             String pStrUnZipPathName) throws IOException
    {
        //定义缓冲区大小
        int BUFFER = 1024 * 1024;
        //定义一个BufferedOutputStream,在后面根据entry来赋值
        BufferedOutputStream dest = null;
        ZipInputStream zis  = null;
        try {           
            //创建压缩文件的FileInputStream
            FileInputStream fis = new FileInputStream(pStrZipPathName);
            //创建压缩文件的ZipInputStream
            zis = new ZipInputStream(new BufferedInputStream(fis));
            //Zip文件的entry
            ZipEntry entry;
            while ( (entry = zis.getNextEntry()) != null) {
                int count;
                byte data[] = new byte[BUFFER];

                if (entry.isDirectory()) {
                    File dir = new File(pStrUnZipPathName + entry.getName() + '\\');
                    //System.out.println(dir.getPath());

                    if (dir.mkdirs()) {
                        //System.out.println("目录:" + dir.getPath() + "/ 创建成功!");
                        continue;
                    }
                    else {
                        //System.out.println("目录:" + dir.getPath() + "/ 创建失败!");
                        System.out.println("目录:" + dir.getPath() + "/ 创建失败!");
                        return false;
                    }
                }

                //创建entry的FileOutputStream
                FileOutputStream fos =
                    new FileOutputStream(pStrUnZipPathName + entry.getName());
                //创建要解压的原始文件的BufferedOutputStream
                dest = new BufferedOutputStream(fos, BUFFER);
                while ( (count = zis.read(data, 0, BUFFER))
                      != -1) {
                   //将数据写入原始文件
                   dest.write(data, 0, count);
            }
            //完成一个原始文件的解压
            dest.flush();
            dest.close();
            }
            zis.close();
        }
        catch (Exception e) {
         log.error("",e);
            return false;
        }finally{
         if(zis != null){
          zis.close();
         }
        }

        return true;
    }

    public static void main(String[] args)
    {
        //UnZip("c:/temp/TD_72.zip", "c:\\temp\\");
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值