zip4j 2.x使用,Java实现文件压缩与解压,加密压缩,ZipParameters ZipFile使用

引入maven坐标

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

工具类

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 org.apache.commons.lang3.StringUtils;

import java.io.File;

/**
 * @author 向振华
 * @date 2021/07/09 10:47
 */
@Slf4j
public class FileZipUtils {

    /**
     * 压缩
     *
     * @param sourceFile 压缩源文件,会在源文件所在目录下新建一个zip文件夹存放压缩后的文件
     * @param password   密码
     */
    public static void compress(File sourceFile, String password) {
        File dir = new File(sourceFile.getParent() + File.separator + "zip");
        dir.mkdir();

        // 文件名
        String fileName = sourceFile.getName();
        // 文件真实名(不含扩展名)
        String realName = fileName.substring(0, fileName.lastIndexOf("."));
        String targetPathname = dir.getAbsolutePath() + File.separator + realName + ".zip";
        File targetFile = new File(targetPathname);

        ZipParameters zipParameters = new ZipParameters();
        ZipFile zipFile = new ZipFile(targetFile);
        // 是否加密
        if (StringUtils.isNotBlank(password)) {
            zipParameters.setEncryptFiles(true);
            zipParameters.setEncryptionMethod(EncryptionMethod.AES);
            zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
            zipFile.setPassword(password.toCharArray());
        }
        try {
            zipFile.addFile(sourceFile, zipParameters);
        } catch (Exception e) {
            log.error("压缩文件异常:", e);
        }
    }

    /**
     * 解压
     *
     * @param sourceFile 解压源文件,会在源文件所在目录下新建一个unzip文件夹存放解压后的文件
     * @param password   密码
     */
    public static void uncompress(File sourceFile, String password) {
        // 文件夹路径
        String parent = sourceFile.getParent();
        String targetPath = parent + File.separator + "unzip";
        File dir = new File(targetPath);
        dir.mkdir();

        ZipFile zipFile = new ZipFile(sourceFile);
        try {
            if (zipFile.isEncrypted()) {
                zipFile.setPassword(password.toCharArray());
            }
            zipFile.extractAll(targetPath);
        } catch (ZipException e) {
            log.error("解压缩文件异常:", e);
        }
    }
}

测试

    public static void main(String[] args) {
        // 压缩
        compress(new File("D:\\Z\\a.png"), "123");

        // 解压
        uncompress(new File("D:\\Z\\zip\\a.zip"), "123");
    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了ZipOutputStream类和ZipInputStream类,用于压缩解压文件压缩文件: ```java import java.io.*; import java.util.zip.*; public class ZipFile { public static void main(String[] args) throws Exception { // 创建压缩文件输出流 FileOutputStream fos = new FileOutputStream("test.zip"); ZipOutputStream zos = new ZipOutputStream(fos); // 创建要压缩文件输入流 FileInputStream fis = new FileInputStream("test.txt"); BufferedInputStream bis = new BufferedInputStream(fis); // 开始写入压缩文件 zos.putNextEntry(new ZipEntry("test.txt")); int len; byte[] buffer = new byte[1024]; while ((len = bis.read(buffer)) > 0) { zos.write(buffer, 0, len); } // 关闭流 bis.close(); zos.closeEntry(); zos.close(); fos.close(); } } ``` 解压文件: ```java import java.io.*; import java.util.zip.*; public class UnzipFile { public static void main(String[] args) throws Exception { // 创建压缩文件输入流 FileInputStream fis = new FileInputStream("test.zip"); ZipInputStream zis = new ZipInputStream(fis); // 开始解压文件 ZipEntry zipEntry = zis.getNextEntry(); while (zipEntry != null) { String fileName = zipEntry.getName(); File file = new File(fileName); FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); int len; byte[] buffer = new byte[1024]; while ((len = zis.read(buffer)) > 0) { bos.write(buffer, 0, len); } // 关闭流 bos.close(); fos.close(); zipEntry = zis.getNextEntry(); } // 关闭流 zis.closeEntry(); zis.close(); fis.close(); } } ``` 以上是基本的压缩解压文件实现方法,也可以使用更高级的类库,如Apache Commons Compress。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值