Java对zip,rar,7z文件带密码解压实例详解

Java对zip,rar,7z文件带密码解压实例详解

在Java中,可以通过使用第三方库来实现对压缩文件的解压操作。其中,针对带有密码保护的压缩文件,需要借助专门的工具才能解压。本文将介绍如何使用Java对zip、rar、7z文件带密码进行解压的详细攻略。

I. 依赖库

首先,需要引入以下依赖库:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.20</version>
</dependency>

II. 解压zip文件

1. 示例1

以下代码展示了如何使用Java对带密码的zip文件进行解压:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
import java.util.zip.ZipEntry;

public class UnzipDemo {

    public static void unzip(String src, String dest, String password) throws IOException {
        ZipArchiveInputStream zipArchiveInputStream = new ZipArchiveInputStream(new FileInputStream(src), password.toCharArray());
        ArchiveEntry archiveEntry;
        while ((archiveEntry = zipArchiveInputStream.getNextEntry()) != null) {
            File entryFile = new File(dest, archiveEntry.getName());
            if (archiveEntry.isDirectory()) {
                entryFile.mkdirs();
            } else {
                OutputStream os = new FileOutputStream(entryFile);
                IOUtils.copy(zipArchiveInputStream, os);
                os.close();
            }
        }
        zipArchiveInputStream.close();
    }

    public static void main(String[] args) throws IOException {
        String src = "test.zip";
        String dest = ".";
        String password = "123456";
        unzip(src, dest, password);
    }
}

在上述代码中,unzip方法接收三个参数:压缩文件的路径,解压文件的目标路径,以及解压密码。其中,通过ZipArchiveInputStream实例化压缩文件,并通过getNextEntry方法遍历各个压缩文件内容。最后,针对不同类型的条目进行不同的处理:若是目录,则创建目录,否则创建相应的文件并输出到文件流中。最后关闭文件流和压缩文件。

执行main方法即可解压该zip文件。

2. 示例2

如果需要从InputStream流中读取并解压zip文件,可以使用以下代码:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
import java.util.zip.ZipEntry;

public class UnzipDemo {

    public static void unzip(InputStream in, String dest, String password) throws IOException {
        ZipArchiveInputStream zipArchiveInputStream = new ZipArchiveInputStream(in, password.toCharArray());
        ArchiveEntry archiveEntry;
        while ((archiveEntry = zipArchiveInputStream.getNextEntry()) != null) {
            File entryFile = new File(dest, archiveEntry.getName());
            if (archiveEntry.isDirectory()) {
                entryFile.mkdirs();
            } else {
                OutputStream os = new FileOutputStream(entryFile);
                IOUtils.copy(zipArchiveInputStream, os);
                os.close();
            }
        }
        zipArchiveInputStream.close();
    }

    public static void main(String[] args) throws IOException {
        String password = "123456";
        String dest = ".";
        String src = "test.zip"
        InputStream in = new FileInputStream(src);
        unzip(in, dest, password);
        in.close();
    }
}

III. 解压rar文件

1. 示例1

以下代码展示了如何使用Java解压带密码的rar文件:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.rar.RarArchiveEntry;
import org.apache.commons.compress.archivers.rar.RarArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
import java.util.zip.ZipEntry;

public class UnrarDemo {

    public static void unrar(String src, String dest, String password) throws IOException {
        InputStream inputStream = new FileInputStream(src);
        RarArchiveInputStream rarArchiveInputStream = new RarArchiveInputStream(inputStream, password);
        ArchiveEntry archiveEntry;
        while ((archiveEntry = rarArchiveInputStream.getNextEntry()) != null) {
            RarArchiveEntry rarArchiveEntry = (RarArchiveEntry) archiveEntry;
            File entryFile = new File(dest, rarArchiveEntry.getName());
            if (rarArchiveEntry.isDirectory()) {
                entryFile.mkdirs();
            } else {
                OutputStream os = new FileOutputStream(entryFile);
                IOUtils.copy(rarArchiveInputStream, os);
                os.close();
            }
        }
        rarArchiveInputStream.close();
    }

    public static void main(String[] args) throws IOException {
        String password = "123456";
        String src = "test.rar";
        String dest = ".";
        unrar(src, dest, password);
    }
}

在上述代码中,使用InputStream将压缩文件读入,借助RarArchiveInputStream实例化rar文件。通过getNextEntry方法读取各个文件条目,并针对不同类型的条目进行不同的处理。在本例中,通过判断是否是目录来创建对应的文件夹或文件。

2. 示例2

如果需要从InputStream流中读取并解压rar文件,可以使用以下代码:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.rar.RarArchiveEntry;
import org.apache.commons.compress.archivers.rar.RarArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
import java.util.zip.ZipEntry;

public class UnrarDemo {

    public static void unrar(InputStream in, String dest, String password) throws IOException {
        RarArchiveInputStream rarArchiveInputStream = new RarArchiveInputStream(in, password);
        ArchiveEntry archiveEntry;
        while ((archiveEntry = rarArchiveInputStream.getNextEntry()) != null) {
            RarArchiveEntry rarArchiveEntry = (RarArchiveEntry) archiveEntry;
            File entryFile = new File(dest, rarArchiveEntry.getName());
            if (rarArchiveEntry.isDirectory()) {
                entryFile.mkdirs();
            } else {
                OutputStream os = new FileOutputStream(entryFile);
                IOUtils.copy(rarArchiveInputStream, os);
                os.close();
            }
        }
        rarArchiveInputStream.close();
    }

    public static void main(String[] args) throws IOException {
        String password = "123456";
        String dest = ".";
        String src = "test.rar"
        InputStream in = new FileInputStream(src);
        unrar(in, dest, password);
        in.close();
    }
}

IV. 解压7z文件

以下代码展示了如何使用Java对带密码的7z文件进行解压:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;

public class Un7zDemo {

    public static void un7z(String src, String dest, String password) throws IOException {
        InputStream inputStream = new FileInputStream(src);
        SevenZArchiveInputStream sevenZArchiveInputStream = new SevenZArchiveInputStream(inputStream);
        SevenZArchiveEntry sevenZArchiveEntry;
        while ((sevenZArchiveEntry = sevenZArchiveInputStream.getNextEntry()) != null
                && !sevenZArchiveEntry.isDirectory()
        ) {
            OutputStream os = new FileOutputStream(new File(dest, sevenZArchiveEntry.getName()));
            IOUtils.copy(sevenZArchiveInputStream, os);
            os.close();
        }
        sevenZArchiveInputStream.close();
    }

    public static void main(String[] args) throws IOException {
        String password = "123456";
        String src = "test.7z";
        String dest = ".";
        un7z(src, dest, password);
    }
}

在以上代码中,使用InputStream将压缩文件读入,借助SevenZArchiveInputStream实例化7z文件。通过getNextEntry方法读取各个文件条目,并针对不同类型的条目进行不同的处理。在本例中,只有未定义的类型时才继续执行输出操作。

V. 结语

以上代码示例展示了如何使用Java实现对带密码的zip、rar、7z文件进行解压,可以根据具体的需求进行改进。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java对zip,rar,7z文件带密码解压实例详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 元空间与永久代的区别是什么?

    以下是关于元空间与永久代的区别的完整使用攻略: 元空间与永久代的区别是什么? 元空间和久代都是Java虚拟机中用于存类信息的区域,但它们之间有以下几点区别: 1. 存储位置 永久代Java虚拟机规范中的一块内存区域,位于堆内存的一部分。而元空间则是在Java 8中入的,它不再于堆内存中,而是直接使用本地内存。 2. 内存管理 永久代的内存空是有限的,当存储的…

    Java 2023年5月12日
    00
  • SpringSecurity实现动态url拦截(基于rbac模型)

    下面是详细讲解 Spring Security 实现动态 URL 拦截(基于 RBAC 模型)的完整攻略: 1. 什么是 Spring Security Spring Security 是一个基于 Spring 框架的安全框架,提供了完善的身份认证和授权功能。 2. 什么是 RBAC 模型 RBAC(Role-Based Access Control)模型是…

    Java 2023年5月20日
    00
  • Mybatis-plus在项目中的简单应用

    以下是Mybatis-plus在项目中的简单应用攻略: 1. 简介 Mybatis-plus是Mybatis的增强工具,它大大简化了Mybatis的使用。Mybatis-plus提供了各种方便的功能,如:自动生成代码、分页查询、乐观锁、多租户等。 2. 安装 在Maven项目中使用Mybatis-plus,需在pom.xml中添加相关依赖: <depe…

    Java 2023年5月20日
    00
  • java新手入门——String类详解

    Java 新手入门 —— String类详解攻略 简介 String 类是 Java 中比较重要的一个类,所有的字符串都是用它来表示的。本攻略将会详细讲解 String 类的各种方法的用法,并通过代码示例来帮助理解。 创建字符串 可以使用两种方式来创建字符串: 使用双引号(” “) 把字符串定义在一个变量中; 使用 String 类的构造函数来创建字符串。 …

    Java 2023年5月19日
    00
  • jsp中存取session值简单介绍

    下面我将详细讲解“JSP中存取session值简单介绍”的完整攻略。 什么是Session Session是指服务端保存用户信息的一种机制,它可以用来保存用户登录信息、用户偏好设置、购物车、验证码等应用场景。 在JSP中,通过内置的session对象来存储用户信息,这个对象可以在同一浏览器窗口内的多个请求间共享,在用户关闭浏览器窗口时就会失效。 Sessio…

    Java 2023年6月15日
    00
  • Java Apache Commons报错“ObjectCreationException”的原因与解决方法

    “ObjectCreationException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 无效的对象:如果对象无效,则可能会出现此错误。在这种情况下,需要检查对象以解决此问题。 无效的配置:如果配置无效,则可能会出现此错误。在这种情况下,需要检查配置以解决此问题。 以下是两个实例: 例1 如果对象无效,则可以尝试检…

    Java 2023年5月5日
    00
  • Jenkins如何实现自动打包部署linux

    Jenkins是一个自动化构建工具,它可以实现自动构建、自动测试和自动部署等功能。下面是实现Jenkins自动打包部署Linux的攻略。 Step 1:安装Jenkins 在Linux系统中,使用apt-get命令来安装Jenkins。在终端中输入以下命令: sudo apt-get install jenkins 安装完成后,可以通过以下命令来启动Jenk…

    Java 2023年5月20日
    00
  • 一篇文章带你学会css变量(推荐!)

    一篇文章带你学会 CSS 变量 本文将从什么是 CSS 变量开始,逐步介绍 CSS 变量的用法和相关技巧,帮助读者熟练使用 CSS 变量。 什么是 CSS 变量 CSS 变量,又称自定义属性,是一种 CSS 新增的功能,它可以在全局范围内定义一个值,并在后续的 CSS 中引用该值。采用变量的方式可以提高 CSS 的复用性,并且可以更方便地对样式进行全局调整。…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部