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中的使用

    贪心算法原理及在Java中的使用 原理概述 贪心算法(Greedy Algorithm),又称贪婪算法、贪心思想,是一种基于贪心策略进行求解的算法。它在每一步都选择当前状态下最优的解,从而获得全局最优的解。贪心算法需要满足“贪心选择性质”和“最优子结构性质”。其中,“贪心选择性质”是指每一步的贪心选择都能导致全局最优解,而“最优子结构性质”则是指问题的最优解…

    Java 2023年5月26日
    00
  • Java代码读取properties配置文件

    读取properties配置文件 package com.easycrud.utils; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.Map; import java.util.Properties; i…

    Java 2023年5月2日
    00
  • hibernate 三种状态的转换

    Hibernate是一个Java语言的ORM(Object-Relational Mapping)框架,用来方便地进行数据库操作。在Hibernate中,每一个对象都有它自己的状态,状态对Hibernate来说非常重要。Hibernate中的实体状态一共有三种,他们是瞬时态、持久态、游离态,下面让我们详细来解释一下这三种状态。 瞬时态 瞬时态是指,一个对象未…

    Java 2023年5月31日
    00
  • Spring Data环境搭建实现过程解析

    下面是 “Spring Data环境搭建实现过程解析”的详细攻略。 1. 前置条件 在开始搭建Spring Data环境之前,需要对以下内容进行准备: 安装JDK(Java Development Kit),并设置JAVA_HOME环境变量。 安装Maven,确保Maven能够正常运行。 2. 创建Maven项目 使用Maven创建一个新项目,可以使用如下命…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“ControllerConfigException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ControllerConfigException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 控制器错误:如果控制器不正确,则可能会出现此错误。在这种情况下,需要检查控制器以解决此问题。 以下是两个实例: 例 1 如…

    Java 2023年5月5日
    00
  • JSP的运行内幕

    JSP的运行内幕 什么是JSP? JSP(JavaServer Pages)是一种基于Java技术的动态Web页面开发技术,它是Sun Microsystems公司提出的用于Web应用程序开发的一套技术规范。JSP技术的出现,大大简化了Web开发中HTML和Java代码的耦合度,使得Web开发变得更容易、更高效。 JSP的运行过程 JSP页面的运行过程可以分…

    Java 2023年5月30日
    00
  • springboot与redis的简单整合实例

    在Spring Boot应用程序中,我们可以使用Redis来实现缓存和数据存储。以下是实现Spring Boot与Redis的简单整合实例的完整攻略: 添加依赖 在Spring Boot应用程序中,我们需要添加以下依赖来使用Redis: <dependency> <groupId>org.springframework.boot&lt…

    Java 2023年5月15日
    00
  • java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    Java Spring Boot自定义注解及自定义解析器实现对象自动注入操作 在Spring Boot应用程序中,我们可以使用自定义注解和自定义解析器来实现对象自动注入操作。在本文中,我们将详细讲解如何实现Java Spring Boot自定义注解及自定义解析器。 自定义注解 首先,我们需要创建一个自定义注解,用于标记需要自动注入的对象。下面是一个示例: @…

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