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线程池必知必会知识点总结 在并发编程中,线程池是一种重要的资源管理方式。线程池可以管理和执行多个线程,从而提高程序的性能和效率,同时还能避免线程创建和销毁的开销。 本文将介绍Java线程池的相关知识点,包括线程池的基本概念、实现原理、使用方法和注意事项。 线程池的基本概念 Java中的线程池主要有两种实现方式:FixedThreadPool和Cach…

    Java 2023年5月20日
    00
  • JSP跨iframe如何传递参数实现代码

    JSP是一种在服务端生成HTML的技术,它能够在生成HTML前进行一些运算和编写,进而方便动态生成页面。在一些特定场景中,如果我们需要在iframe之间传递参数并改变其显示内容,就需要使用JSP来实现 实现方法 在这里,我们可以使用GET方式传递参数,具体实现步骤如下: 在当前iframe中的a标签中编写一个函数,使其在被点击时触发传参的操作,传递参数的同时…

    Java 2023年6月15日
    00
  • jsp页面 列表 展示 ajax异步实现方法

    下面是jsp页面列表展示ajax异步实现方法的完整攻略: 一、设计前提 在开始制作列表展示界面前,需要先明确以下内容: 数据来源:需要访问数据库、后端接口、本地文件等数据源来展示列表信息 列表展示形式:需要确定展示列表的形式,比如表格、列表、卡片等 列表数据的显示方式:需要决定列表每一列的显示形式,比如文本、图片、链接等 二、实现方法 在JSP页面中创建一个…

    Java 2023年5月20日
    00
  • Java简单高效实现分页功能

    下面是Java简单高效实现分页功能的完整攻略: 1. 分页功能的意义 分页是Web应用程序中一项非常常见的功能,它可以将大量的数据分解成多个小页面,让用户可以更加方便地阅读和使用。分页功能通常需要在后端代码中进行处理,最终输出包含分页信息的HTML代码。 2. 实现分页功能的思路 实现分页功能的核心是将一系列数据按照一定的规则进行拆分,常见的做法是将所有数据…

    Java 2023年6月15日
    00
  • javascript之正则表达式基础知识小结

    JavaScript之正则表达式基础知识小结 正则表达式(Regular Expression)是一个用来处理文本的强大工具,具有非常丰富的语法和大量的用途,它可以用来处理文本的搜索、匹配、替换、验证等方面的问题。 正则表达式创建 在 JavaScript 中,正则表达式可以通过两种方式来创建: 1. 通过字面量形式创建 var reg = /ab+c/; …

    Java 2023年5月26日
    00
  • Spring超详细讲解面向对象到面向切面

    以下是一份“Spring超详细讲解面向对象到面向切面”的完整攻略: 什么是面向对象编程 面向对象编程(OOP)是一种程序设计范式,其中对象可以相互交互以实现逻辑。在Java编程环境中,面向对象编程可以帮助程序员更好地重复利用和组织代码,使得代码更易于维护和扩展。 什么是Spring框架 Spring框架是一种轻量级的、开源的、基于Java的应用框架,旨在简化…

    Java 2023年5月19日
    00
  • Spring+Hibernate+Struts(SSH)框架整合实战

    Spring+Hibernate+Struts(SSH)框架整合实战 SSH框架整合是Java Web开发中常用的一种方式,它将Spring、Hibernate和Struts三个框架整合在一起,形成了一个完整的Web应用程序。在本文中,我们将详细讲解如何使用SSH框架整合开发Web应用程序,并提供两个示例来说明如何使用SSH框架整合开发Web应用程序。 环境…

    Java 2023年5月18日
    00
  • SpringBoot请求处理之常用参数注解介绍与源码分析

    SpringBoot请求处理之常用参数注解介绍与源码分析 在Spring Boot应用程序中,我们需要处理各种类型的请求。在处理请求时,我们需要使用不同的参数注解来获取请求参数。本文将详细介绍Spring Boot请求处理中常用的参数注解,并分析其源代码。 @RequestParam @RequestParam注解用于获取请求参数。以下是一个示例: @Get…

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