简单压缩文件

    public void zipFile(String zipFileName, List<File> files) {
        try {
            // 创建一个输出流用于写入ZIP文件
            FileOutputStream fos = new FileOutputStream(zipFileName);
            ZipOutputStream zos = new ZipOutputStream(fos);

            for (File file : files) {
                // 打开要压缩的文件
                FileInputStream fis = new FileInputStream(file);
                // 将文件添加到ZIP文件中
                zos.putNextEntry(new ZipEntry(file.getName()));
                // 将文件内容写入ZIP文件
                byte[] buffer = new byte[1024];
                int length;
                while ((length = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, length);
                }
                // 关闭当前文件的ZipEntry
                zos.closeEntry();
                // 关闭文件输入流
                fis.close();
            }
            // 关闭ZIP输出流
            zos.close();
        } catch (IOException e) {
			log.error("文件压缩失败", e);
            throw new RuntimeException(e);
        }
    }

加密压缩文件

导入依赖

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

示例代码

	public static void zip(List<File> files, String dest, String passwd) {
        ZipParameters parameters = new ZipParameters();
        // 压缩方式
        parameters.setCompressionMethod(CompressionMethod.DEFLATE);
        // 压缩级别
        parameters.setCompressionLevel(CompressionLevel.NORMAL);
        try (ZipFile zipFile = new ZipFile(dest)) {
            if (!StringUtils.isEmpty(passwd)) {
                parameters.setEncryptFiles(true);
                // 加密方式
                parameters.setEncryptionMethod(EncryptionMethod.AES);
                parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
                zipFile.setPassword(passwd.toCharArray());
            }
            for (File file : files) {
                zipFile.addFile(file, parameters);
            }
        } catch (IOException e) {
			log.error("文件压缩失败", e);
            throw new RuntimeException(e);
        }
    }