JAVA压缩加压带密码

引入jar包

     <dependency>
            <groupId>net.lingala.zip4j</groupId>
            <artifactId>zip4j</artifactId>
            <version>1.3.2</version>
        </dependency>
package com.zwx.study.test;

import java.io.File;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

/**
 * 对文件进行压缩和加密
 * 对文件进行解压和解密
 */
public class CompressUtils {

    public static void main(String[] args) {
        String unZipfile = "E:\\test\\unZipfile";
        String targetDest = "E:\\test\\targetDest";
        String zipDest = "E:\\test\\zipDest.zip";
        CompressUtils compressUtils = new CompressUtils();
        try {
            compressUtils.zip(targetDest,zipDest,"123456");
            compressUtils.unZip(new File(zipDest),unZipfile,"123456");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 解压加密的压缩文件
     *
     * @param zipfile
     * @param dest
     * @param passwd
     * @throws ZipException
     */
    public void unZip(File zipfile, String dest, String passwd) throws ZipException {
        ZipFile zfile = new ZipFile(zipfile);
        //在GBK系统中需要设置
//        zfile.setFileNameCharset("GBK");
        if (!zfile.isValidZipFile()) {
            throw new ZipException("压缩文件不合法,可能已经损坏!");
        }
        File file = new File(dest);
        if (file.isDirectory() && !file.exists()) {
            file.mkdirs();
        }
        if (zfile.isEncrypted()) {
            zfile.setPassword(passwd.toCharArray());
        }
        zfile.extractAll(dest);
    }

    /**
     * 压缩文件且加密
     *
     * @param src
     * @param dest
     * @param passwd
     */
    public void zip(String src, String dest, String passwd) {
        File srcfile = new File(src);
        //创建目标文件
        String destname = buildDestFileName(srcfile, dest);
        ZipParameters par = new ZipParameters();
        par.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
        par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        if (passwd != null) {
            par.setEncryptFiles(true);
            par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
            par.setPassword(passwd.toCharArray());
        }
        try {
            ZipFile zipfile = new ZipFile(destname);
            if (srcfile.isDirectory()) {
//                File[] listFiles = srcfile.listFiles();
//                ArrayList<File> temp = new ArrayList<File>();
//                Collections.addAll(temp, listFiles);
//                zipfile.addFiles(temp, par);
                zipfile.addFolder(srcfile, par);
            } else {
                zipfile.addFile(srcfile, par);
            }
        } catch (ZipException e) {
            e.printStackTrace();
        }


    }

    /**
     * 目标文件名称
     *
     * @param srcfile
     * @param dest
     * @return
     */
    public String buildDestFileName(File srcfile, String dest) {
        if (dest == null) {
            //没有给出目标路径时
            if (srcfile.isDirectory()) {
                dest = srcfile.getParent() + File.separator + srcfile.getName() + ".zip";
            } else {
                String filename = srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));
                dest = srcfile.getParent() + File.separator + filename + ".zip";
            }
        } else {
            //路径的创建
            createPath(dest);
            if (dest.endsWith(File.separator)) {
                String filename = "";
                if (srcfile.isDirectory()) {
                    filename = srcfile.getName();
                } else {
                    filename = srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));
                }
                dest += filename + ".zip";
            }
        }
        return dest;
    }

    /**
     * 路径创建
     *
     * @param dest
     */
    private void createPath(String dest) {
        File destDir = null;
        if (dest.endsWith(File.separator)) {
            //给出的是路径时
            destDir = new File(dest);
        } else {
            destDir = new File(dest.substring(0, dest.lastIndexOf(File.separator)));
        }
        if (!destDir.exists()) {
            destDir.mkdirs();
        }
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值