admin管理员组

文章数量:1632336

Java递归解压缩Zip、7z、7zx、Rar5(使用winrar.exe)可解压这四种类型的嵌套压缩

  • 依赖
    • Zip
    • 7z
    • Rar
  • 说明
  • 代码(复制即可用)

依赖

Zip

官方自带,无需额外操作

7z

  1. commons-compress-1.20.jar:https://mvnrepository/artifact/org.apachemons/commons-compress/1.20
<!-- https://mvnrepository/artifact/org.apachemons/commons-compress -->
<dependency>
    <groupId>org.apachemons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.20</version>
</dependency>
  1. xz-1.9.jar:https://mvnrepository/artifact/org.tukaani/xz/1.9
<!-- https://mvnrepository/artifact/org.tukaani/xz -->
<dependency>
    <groupId>org.tukaani</groupId>
    <artifactId>xz</artifactId>
    <version>1.9</version>
</dependency>

Rar

需要安装WinRAR软件,提供一个无广告版本(收集于网络,侵删):
链接:https://pan.baidu/s/17MaMZHO6WFB7diiyyBI5dg
提取码:yang

说明

  1. Zip解压代码来自Stack Overflow:How to unzip files recursively in Java?
  2. 7z解压由于后来测试解压2.4G的大文件需要10分钟,而调用WinRAR只需要1分多钟,因此弃用。实际上任何格式都可以调用WinRAR来解压
  3. Rar5解压目前只能通过这种命令行调用WinRAR的方式来解压,至少我搜遍CSDN和Stack Overflow都没找到,《java实现解压rar5》这个帖子是假的,《java解压rar5 兼容rar4》这个帖子只能解压TXT格式的文件,其他文件会损坏
  4. isZip()这个方法是通过文件头判断是否为Zip文件。如果文件本身是其他类型而手动改后缀名为.zip,解压会报错
  5. Rar解压的递归和Zip解压的递归原理不同,Rar是把文件解压出来,然后去递归文件夹,而Zip使用官方包,是直接把压缩包内容递归

代码(复制即可用)

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;

import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * 文件压缩工具类
 */
public class ZipUtil {
   

    public static void main(String[] args) throws IOException {
   
        long start = System.currentTimeMillis();
        try {
   
        	// 测试
            decompress("D:\\Download\\1.7z");
        } catch (Exception e) {
   
            e.printStackTrace();
        }
        System.out.println(String.format("耗时:%sms. ", System.currentTimeMillis() - start

本文标签: 递归嵌套解压缩这四种类