• 如何在Java中加密和解密zip文件?


    大家好,我是指北君。

    在本文中,我们来学习如何用Zip4j库创建受密码保护的压缩文件并将其解压。

    依赖

    让我们先把 zip4j​ 依赖关系添加到我们的 pom.xml 文件中。

    <dependency>
        <groupId>net.lingala.zip4j</groupId>
        <artifactId>zip4j</artifactId>
        <version>2.9.0</version>
    </dependency>

    压缩一个文件

    首先,我们将使用ZipFile addFile()​方法将一个名为aFile.txt​的文件压缩到一个名为compressed.zip的有密码保护的 zip 文件。

    ZipParameters zipParameters = new ZipParameters();
    zipParameters.setEncryptFiles(true);
    zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
    zipParameters.setEncryptionMethod(EncryptionMethod.AES);
    
    ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
    zipFile.addFile(new File("aFile.txt"), zipParameters);

    setCompressionLevel​一行是可选的。我们可以从FASTEST到ULTRA​级别中选择(默认是NORMAL)。

    在这个例子中,我们使用了AES加密。如果我们想使用Zip标准加密,我们只需用ZIP_STANDARD​替换AES。

    注意,如果文件 "aFile.txt "在磁盘上不存在,该方法将抛出一个异常。net.lingala.zip4j.exception.ZipException File does not exist: …

    为了解决这个问题,我们必须确保该文件是手动创建并放置在项目文件夹中,或者我们必须从Java中创建它。

    File fileToAdd = new File("aFile.txt");
    if (!fileToAdd.exists()) {
        fileToAdd.createNewFile();
    }

    另外,在我们完成了新的ZipFile之后,需要及时关闭资源:

    zipFile.close();

    压缩多个文件

    让我们修改一下代码,以便我们能够一次压缩多个文件。

    ZipParameters zipParameters = new ZipParameters();
    zipParameters.setEncryptFiles(true);
    zipParameters.setEncryptionMethod(EncryptionMethod.AES);
    
    List<File> filesToAdd = Arrays.asList(
      new File("aFile.txt"),
      new File("bFile.txt")
    );
    
    ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
    zipFile.addFiles(filesToAdd, zipParameters);

    我们不使用addFile​方法,而是使用addFiles()​并传入一个List的文件。

    压缩一个目录

    我们可以简单地用addFolder​代替addFile方法来压缩一个文件夹。

    ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
    zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);

    创建一个分割的压缩文件

    我们可以通过使用createSplitZipFile和createSplitZipFileFromFolder方法,``将压缩文件分割成几个文件。

    ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
    int splitLength = 1024 * 1024 * 10; 
    zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength);
    zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength);

    splitLength的单位是字节。

    提取所有文件

    提取文件也同样简单。我们可以用extractAll()​方法从我们的compressed.zip中提取所有文件。

    ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
    zipFile.extractAll("/destination_directory");

    提取单个文件

    如果我们只想从compressed.zip​中提取一个文件,我们可以使用extractFile()方法。

    ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
    zipFile.extractFile("aFile.txt", "/destination_directory");

    总结

    综上所述,我们已经学会了如何用Zip4j库在Java中创建受密码保护的压缩文件并将其解压。

    来源:https://www.51cto.com/article/719593.html
  • 相关阅读:
    数据库基础-INDEX
    LINQ教程
    NPOI导出EXCEL
    WPF数据双向绑定
    WPF控件数据单项绑定
    HelloWorld IL代码
    Python基础教程(英文视频教学)
    ado.net的5个主要对象
    Linux学习-0627
    C#中Abstract和Virtual
  • 原文地址:https://www.cnblogs.com/konglxblog/p/16736235.html
Copyright © 2020-2023  润新知