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

yizhihongxing

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日

相关文章

  • @Controller、@RestController注解区别详解

    下面是关于“@Controller、@RestController注解区别详解”的完整攻略。 一、@Controller注解 @Controller是SpringMVC中常用的控制器注解,用于标记此类为控制器,能够处理用户的请求并返回相应的数据。 1.1 示例代码 @Controller @RequestMapping("/hello")…

    Java 2023年6月15日
    00
  • 强烈推荐-ajax开发者必看的文章第3/3页

    让我为您详细讲解一下“强烈推荐-ajax开发者必看的文章第3/3页”的完整攻略。 强烈推荐-ajax开发者必看的文章第3/3页 1. Ajax简介 Ajax是一种基于现有标准的web开发技术,主要运用JavaScript、XML、CSS、DOM等技术实现异步加载数据和局部刷新的效果。它的优点是可以提高web应用的交互效率,减轻服务器压力,提升用户体验。 2.…

    Java 2023年6月15日
    00
  • Java基于IDEA实现http编程的示例代码

    Java基于IDEA实现HTTP编程的示例代码攻略主要分为以下几个步骤: 步骤一:导入依赖 首先需要在项目中导入 httpclient 依赖包。在 pom.xml 文件中添加以下依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifac…

    Java 2023年5月19日
    00
  • 基于java查找并打印输出字符串中字符出现次数

    下面是基于java查找并打印输出字符串中字符出现次数的完整攻略: 1. 确定需求 首先,需要明确需求,也就是我们要实现什么样的功能。本题要求查找某个字符串中包含的某个字符出现的次数,并输出结果。 2. 获取输入字符串 接下来,需要考虑如何获取输入的字符串。常见的方法包括从用户的输入中获取,从文件中读取等。以下我们以从用户输入中获取字符串为例,使用 Scann…

    Java 2023年5月26日
    00
  • JavaScript 下载链接图片后上传的实现

    JavaScript 下载链接图片后上传的实现可以分为两个步骤: 步骤一:使用 fetch 下载图片 使用 fetch 函数可以快速、简单地下载远程图片。 fetch 函数可以返回图片的二进制数据,并且可以设置一些参数,例如请求的 method、headers、mode 等。下面是一个下载图片的示例: fetch(‘http://example.com/im…

    Java 2023年6月15日
    00
  • Springboot-Management的项目实践

    关于“Springboot-Management的项目实践”的完整攻略,我为您提供以下内容: 简介 Springboot-Management是一个基于SpringBoot框架的开源项目,它可以帮助开发者快速构建管理系统,提供了众多易于使用的管理工具,支持多租户、权限控制等功能。 准备工作 在开始使用Springboot-Management之前,需要系统具…

    Java 2023年5月15日
    00
  • eclipse中java变量怎么变成json格式的编码?

    首先,将Java变量转换为JSON格式是一种常见需求,可以使用一些库和工具来实现它。其中,常用的有Gson、Jackson等。 下面具体介绍使用Gson库来实现Java变量转换为JSON格式的方法。 添加Gson库依赖 在项目中添加Gson库的依赖,可以使用Maven或Gradle进行添加。以Gradle为例,在build.gradle文件的dependen…

    Java 2023年5月20日
    00
  • Spring Data Jpa 自动生成表结构的方法示例

    首先,我们需要先了解Spring Data Jpa自动生成表结构的方法。Spring Data Jpa是Spring框架中的一个重要组成部分,它提供了一种方便快捷的方式来管理和操作数据库中的数据。 Spring Data Jpa可以自动生成表结构,这样就不需要手动编写SQL语句来创建表了。具体的步骤如下: 配置数据源 在你的Spring应用程序中,你需要首先…

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