随笔 - 630  文章 - 7 评论 - 47 阅读 - 49万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cast.c514.transfer.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 *
 * @author cuizhf
 */
public class MyZipUtil {

    private MyZipUtil() {
    }

    /**
     * 执行压缩文件的解压,并自动生成文件的操作
     *
     * @throws java.io.IOException
     * @see http://blog.csdn.net/isea533/article/details/7995472
     * @param in
     * @param outputDirectory
     */
    public static void unZip(InputStream in, String outputDirectory) throws IOException {
        // 通过Charset.forName("GBK")解决乱码问题
        try (ZipInputStream zins = new ZipInputStream(in, Charset.forName("GBK"))) {
            ZipEntry ze;
            byte[] ch = new byte[256];
            while ((ze = zins.getNextEntry()) != null) {
                File zfile = new File(outputDirectory + File.separator + ze.getName());
                File fpath = new File(zfile.getParentFile().getPath());
                if (ze.isDirectory()) {
                    if (!zfile.exists()) {
                        zfile.mkdirs();
                    }
                    zins.closeEntry();
                } else {
                    if (!fpath.exists()) {
                        fpath.mkdirs();
                    }
                    try (FileOutputStream fouts = new FileOutputStream(zfile)) {
                        int i;
                        while ((i = zins.read(ch)) != -1) {
                            fouts.write(ch, 0, i);
                        }
                        zins.closeEntry();
                    }
                }
            }
        }
    }
}

posted on   网络大豆  阅读(181)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2016-09-21 Substance 6 设置 watermark(水印)
2012-09-21 JPA的一个blog
2012-09-21 http://vivin.net/2010/01/30/generic-n-ary-tree-in-java/
2011-09-21 JTextPane/DefaultStyledDocument的序列化的相关问题
2011-09-21 JTextPane自动滚动到末尾
2011-09-21 征途2淮阳寻宝源代码(无说明,自己备用:)
2011-09-21 JxtaBiDiPipe的RetryingOutputPipeConnect中的周期性任务耗费时间过长///Long Task Detector warning
点击右上角即可分享
微信分享提示