< 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
解压zip
复制代码
package com.xcg.webapp.common;

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.ZipFile;

public class ZipUtil {
    /**
     * 解压zip
     */
    public static void unzip(String zipFilePath, String destDir) throws IOException {
        //文件名编码格式GBK,不是UTF-8
        Charset charset = Charset.forName("GBK");
        ZipFile zipFile = new ZipFile(zipFilePath, charset);
        zipFile.stream()
                .forEach(entry -> {
                    try {
                        File file = new File(destDir, entry.getName());
                        if (entry.isDirectory()) {
                            file.mkdirs();
                        } else {
                            try (InputStream is = zipFile.getInputStream(entry);
                                 FileOutputStream fos = new FileOutputStream(file)) {
                                byte[] buffer = new byte[8192];
                                int len;
                                while ((len = is.read(buffer)) != -1) {
                                    fos.write(buffer, 0, len);
                                }
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
    }
}
复制代码

解压rar
POM

复制代码
        <dependency>
            <groupId>net.sf.sevenzipjbinding</groupId>
            <artifactId>sevenzipjbinding</artifactId>
            <version>16.02-2.01</version>
        </dependency>
        <dependency>
            <groupId>net.sf.sevenzipjbinding</groupId>
            <artifactId>sevenzipjbinding-all-platforms</artifactId>
            <version>16.02-2.01</version>
        </dependency>
复制代码

code

复制代码
package com.xcg.webapp.common;

import net.sf.sevenzipjbinding.IInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;

import java.io.File;
import java.io.RandomAccessFile;
import java.util.List;

public class ZipRarUtil {
    private static final String CHINESE_CHARSET = "GBK";

    public static List<String> unRar(File rarFile, String dstDirectoryPath) {

        try (RandomAccessFile randomAccessFile = new RandomAccessFile(rarFile, "r");
             IInArchive archive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile));
        ) {
            int[] in = new int[archive.getNumberOfItems()];
            for (int i = 0; i < in.length; i++) {
                in[i] = i;
            }
            final ExtractCallback extractCallback = new ExtractCallback(archive, dstDirectoryPath);
            archive.extract(in, false, extractCallback);
            archive.close();
            randomAccessFile.close();
            return extractCallback.getNameList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
复制代码

参考:https://blog.csdn.net/weixin_49079441/article/details/134176071

posted on   邢帅杰  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2019-10-10 sp_addlinkedserver 跨服务器连接数据库查询
2018-10-10 ajax添加header信息
2015-10-10 DataTableExtensions
点击右上角即可分享
微信分享提示