java 文件压缩zip【两种方式】

这篇具有很好参考价值的文章主要介绍了java 文件压缩zip【两种方式】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一、普通方式

package com.hebta.source.code.util;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtils {

    /**
     * @param files 传入需要压缩的文件数组 例如 ["/woke/file/1.jpg", "/woke/file/2.jpg"...]
     * @return
     */
    public String createZip(String[] files) {

        String zipFileName = "zipName.zip";
        // zipName为上一步文件打包zip时传入的zipName
        File zipFile = new File("/woke/file/" + zipFileName);
        if (!zipFile.getParentFile().exists()) {
            zipFile.getParentFile().mkdirs();
        }
        if (!zipFile.exists()) {
            try {
                zipFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        zip(files, zipFile);
        return zipFileName;
    }

    /**
     *
     * @param files 需要压缩的文件 例如 ["/woke/file/1.jpg", "/woke/file/2.jpg"...]
     * @param zipFile 压缩后输出的文件
     */
    public void zip(String[] files, File zipFile) {

        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        ZipOutputStream zipOutputStream = null;
        BufferedInputStream bufferInputStream = null;
        try {
            // zipFileName为压缩文件的名称(xx.zip),首先在某个目录下(C:/temp/路径可以根据自己的需求进行修改)创建一个.zip结尾的文件
            fileOutputStream = new FileOutputStream(zipFile);
            zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream));
            // 创建读写缓冲区
            byte[] bufs = new byte[1024 * 10];
            for (String file : files) {
                File voiceFile = new File(file);
                if (voiceFile.exists()) {
                    ZipEntry zipEntry;
                    // 压缩文件下的目录分级,如果不分目录可以直接用fileName.文件后缀
                    zipEntry = new ZipEntry("path/folderName/fileName." + getFileExtension(voiceFile));

                    // 创建ZIP实体,并添加进压缩包
                    zipOutputStream.putNextEntry(zipEntry);

                    // 读取待压缩的文件并写进压缩包里
                    fileInputStream = new FileInputStream(voiceFile);
                    bufferInputStream = new BufferedInputStream(fileInputStream, 1024 * 10);
                    int read = 0;
                    while ((read = bufferInputStream.read(bufs, 0, 1024 * 10)) != -1) {
                        zipOutputStream.write(bufs, 0, read);
                    }

                }

            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufferInputStream != null) {
                    bufferInputStream.close();
                }
                if (zipOutputStream != null) {
                    zipOutputStream.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

    /**
     * 获取文件后缀名
     * @param file
     * @return
     */
    private static String getFileExtension(File file) {
        String fileName = file.getName();
        if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0)
            return fileName.substring(fileName.lastIndexOf(".") + 1);
        else return " ";
    }
}

二、使用zip4j方式

引入jar:

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

 代码块:文章来源地址https://www.toymoban.com/news/detail-508980.html

package com.hebta.source.code.util;


import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.AesKeyStrength;
import net.lingala.zip4j.model.enums.EncryptionMethod;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class ZipUtils {

    /**
     *
     * @param files 需要压缩的文件
     * @param zipName 文件名称
     * @param pwd 密码
     * @return
     */
    public static void createZip(List<String> files, String zipName, String pwd) {

        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setEncryptFiles(true);
        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
        // Below line is optional. AES 256 is used by default. You can override it to use AES 128. AES 192 is supported only for extracting.
        zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
        List<File> filesToAdd = new ArrayList<>();
        for (String file : files) {
            filesToAdd.add(new File(file));
        }
//        将文件夹添加到压缩文件
//        new ZipFile("filename.zip").addFolder(new File("/users/some_user/folder_to_add"));
        ZipFile zipFile = new ZipFile(zipName, pwd.toCharArray());
        try {
            zipFile.addFiles(filesToAdd, zipParameters);
        } catch (ZipException e) {
            log.info("生成zip失败:" + e.getMessage());
            e.printStackTrace();
        }

    }


    /**
     * 压缩文件夹加密
     * @param inputFile  D:\\test  要打包的文件夹
     * @param outputFile  D:\test1.zip 生成的压缩包的名字
     * @param pwd  压缩密码
     */
    public static void zipFileWithPwd(String inputFile,String outputFile, String pwd) {
        // 生成的压缩文件
        try {
            ZipFile zipFile = new ZipFile(outputFile, pwd.toCharArray());
            ZipParameters zipParameters = new ZipParameters();
            zipParameters.setEncryptFiles(true);
            zipParameters.setEncryptionMethod(EncryptionMethod.AES);
            zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
            // 要打包的文件夹
            File currentFile = new File(inputFile);
            File[] fs = currentFile.listFiles();
            // 遍历test文件夹下所有的文件、文件夹
            for (File f : fs) {
                if (f.isDirectory()) {
                    zipFile.addFolder(f, zipParameters);
                } else {
                    zipFile.addFile(f, zipParameters);
                }
            }
        } catch (ZipException e) {
            e.printStackTrace();
        }

    }

}

到了这里,关于java 文件压缩zip【两种方式】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java将指定文件夹按照文件目录压缩为zip压缩包

    将指定的压缩包作为流发送给浏览器 下面粘贴一些没有用的东西 ,是我自已业务的逻辑,,主要逻辑是根据传入文件不同 判断将压缩包发送给浏览器 还是将xls模板发送给浏览器

    2024年02月16日
    浏览(33)
  • Java压缩文件为ZIP并加密

    当您需要将文件加密并保存为ZIP文件时,可以使用 net.lingala.zip4j 库来实现。 步骤1:准备工作 首先,确保您已经包含了 net.lingala.zip4j 库,并将其添加到您的Java项目中。您可以通过Maven或Gradle等构建工具来添加这个库。仓库地址 步骤2:单文件压缩 接下来,编写Java代码来执行

    2024年02月05日
    浏览(26)
  • Java 压缩多个文件为zip包(中间不生成临时文件,直接压缩为zip二进制流),以及解压zip包二进制流为文件

    这篇博客将提供俩种方法, 提前生成要压缩的多个文件,然后读取文件夹多层或一层去遍历压缩zip包 直接用原始文件名称及二进制流,压缩返回zip包二进制流,中间不生成冗余文件; 很明显方法2更优一些; 解压zip文件或者zip文件流验证; 压缩俩个文件到zip包,并分别解析

    2024年02月06日
    浏览(45)
  • java~将多个输出流压缩成一个zip文件

    hutool工具包可以帮我们完成这件事,几行代码可以实现,我们提供两种方式,压缩本地文件和压缩内存流。 扩展阅读:如果希望进行模版技术,可以看一下org.apache.velocity.tools:velocity-tools-generic包,可直接引用依赖 *版本 引用依赖 org.apache.velocity 是 Apache Velocity 模板引擎的 Ja

    2024年02月05日
    浏览(34)
  • Java的zip文件压缩与解压:ZipInputStream,ZipOutputStream

       用ZipOutputStream来压缩一个文件夹时,要搭配ZipEntry来使用。ZipEntry是用来创建压缩文件的。    举个例子,向压缩文件中添加一个文件的代码: 如下图:    在创建ZipEntry对象时可以指定文件在压缩包的位置:new ZipEntry(“second-dirsecond-01.txt”)    在使用ZipOutputStrea

    2024年02月16日
    浏览(34)
  • Linux 压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    Linux 压缩、解压文件的方式有如下几种: tar 是一种常用的打包工具,可以将多个文件或目录打包成一个 tar 包,也可以将一个 tar 包解压缩到指定的目录。 1.1. 压缩: 1.2. 解压: 1.3. tar 命令各参数含义 tar 命令是 Linux 下常用的打包和压缩工具,用于将多个文件或目录打包成一

    2024年02月10日
    浏览(37)
  • 【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    目录 1、使用 tar 命令: 1.1. 压缩: 1.2. 解压: 1.3. tar 命令各参数含义 2. gzip、gunzip gzip 命令: 压缩文件: 保留原始文件,创建压缩文件: 保留原始文件,显示压缩进度: gunzip 命令: 解压文件: 保留压缩文件,创建原始文件: 保留压缩文件,显示解压进度: 3. zip、unzip

    2024年02月03日
    浏览(33)
  • Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载

    有时候在系统中需要一次性下载多个文件,但逐个下载文件比较麻烦。这时候,最好的解决办法是将所有文件打包成一个压缩文件,然后下载这个压缩文件,这样就可以一次性获取所有所需的文件了。 下面是一个名为CompressUtil的工具类的代码,它提供了一些方法来处理文件压

    2024年02月06日
    浏览(43)
  • java 解读zip文件,获取压缩包内各文件的流的集合

    解读zip文件,把zip文件内的众文件转化成流集合,方便其他后续操作

    2024年02月10日
    浏览(42)
  • java 批量下载将多个文件(minio中存储)压缩成一个zip包

    我的需求是将minio中存储的文件按照查询条件查询出来统一压成一个zip包然后下载下来。 思路:针对这个需求,其实可以有多个思路,不过也大同小异,一般都是后端返回流文件前端再处理下载,也有少数是压缩成zip包之后直接给下载链接返回到前端,前端收到链接url直接

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包