All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.net.wanmo.common.compress.Zip4jUtil Maven / Gradle / Ivy

The newest version!
package cn.net.wanmo.common.compress;

import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.CompressionLevel;
import net.lingala.zip4j.model.enums.EncryptionMethod;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class Zip4jUtil {

    /**
     * 压缩单个文件
     *
     * @param sourceFile  待压缩的文件
     * @param descZipFile 压缩的文件
     * @throws IOException 异常
     */
    public static void compressFile(File sourceFile, File descZipFile) throws IOException {
        compressFile(sourceFile, descZipFile, null);
    }

    /**
     * 压缩单个文件
     *
     * @param sourceFile  待压缩的文件
     * @param descZipFile 压缩的文件
     * @param password    密码
     * @throws IOException 异常
     */
    public static void compressFile(File sourceFile, File descZipFile, String password) throws IOException {
        ZipFile zipFile = getZipFile(descZipFile, password);
        ZipParameters zipParameters = getZipParameters(password);
        compressFile(sourceFile, zipFile, zipParameters);
    }

    /**
     * 压缩单个文件
     *
     * @param sourceFile    待压缩的文件
     * @param zipFile       压缩对象
     * @param zipParameters 压缩参数
     * @throws IOException 异常
     */
    public static void compressFile(File sourceFile, ZipFile zipFile, ZipParameters zipParameters) throws IOException {
        zipFile.addFile(sourceFile, zipParameters);
        zipFile.close();
    }

    /**
     * 压缩多个文件
     *
     * @param sourceFiles 待压缩的文件
     * @param descZipFile 压缩的文件
     * @throws IOException 异常
     */
    public static void compressFiles(List sourceFiles, File descZipFile) throws IOException {
        compressFiles(sourceFiles, descZipFile, null);
    }

    /**
     * 压缩多个文件
     *
     * @param sourceFiles 待压缩的文件
     * @param descZipFile 压缩的文件
     * @param password    密码
     * @throws IOException 异常
     */
    public static void compressFiles(List sourceFiles, File descZipFile, String password) throws IOException {
        ZipFile zipFile = getZipFile(descZipFile, password);
        ZipParameters zipParameters = getZipParameters(password);
        compressFiles(sourceFiles, zipFile, zipParameters);
    }

    /**
     * 压缩多个文件
     *
     * @param sourceFiles   待压缩的文件
     * @param zipFile       压缩对象
     * @param zipParameters 压缩参数
     * @throws IOException 异常
     */
    public static void compressFiles(List sourceFiles, ZipFile zipFile, ZipParameters zipParameters) throws IOException {
        zipFile.addFiles(sourceFiles, zipParameters);
        zipFile.close();
    }

    /**
     * 压缩多个文件,并分割
     *
     * @param sourceFiles 待压缩的文件
     * @param descZipFile 压缩的文件
     * @param splitLength 分割单位是字节 1024 * 1024 * 10; //10MB
     * @throws IOException 异常
     */
    public static void compressFilesSplit(List sourceFiles, File descZipFile, int splitLength) throws IOException {
        compressFilesSplit(sourceFiles, descZipFile, null, splitLength);
    }

    /**
     * 压缩多个文件,并分割
     *
     * @param sourceFiles 待压缩的文件
     * @param descZipFile 压缩的文件
     * @param password    密码
     * @param splitLength 分割单位是字节 1024 * 1024 * 10; //10MB
     * @throws IOException 异常
     */
    public static void compressFilesSplit(List sourceFiles, File descZipFile, String password, int splitLength) throws IOException {
        ZipFile zipFile = getZipFile(descZipFile, password);
        ZipParameters zipParameters = getZipParameters(password);
        compressFilesSplit(sourceFiles, zipFile, zipParameters, splitLength);
    }

    /**
     * 压缩多个文件,并分割
     *
     * @param sourceFiles   待压缩的文件
     * @param zipFile       压缩对象
     * @param zipParameters 压缩参数
     * @param splitLength   分割单位是字节 1024 * 1024 * 10; //10MB
     * @throws IOException 异常
     */
    public static void compressFilesSplit(List sourceFiles, ZipFile zipFile, ZipParameters zipParameters, int splitLength) throws IOException {
        zipFile.createSplitZipFile(sourceFiles, zipParameters, true, splitLength);
        zipFile.close();
    }

    /**
     * 压缩文件夹
     *
     * @param sourceDir   待压缩的文件夹
     * @param descZipFile 压缩的文件
     * @throws IOException 异常
     */
    public static void compressDir(File sourceDir, File descZipFile) throws IOException {
        compressDir(sourceDir, descZipFile, null);
    }

    /**
     * 压缩文件夹
     *
     * @param sourceDir   待压缩的文件夹
     * @param descZipFile 压缩的文件
     * @param password    密码
     * @throws IOException 异常
     */
    public static void compressDir(File sourceDir, File descZipFile, String password) throws IOException {
        ZipFile zipFile = getZipFile(descZipFile, password);
        ZipParameters zipParameters = getZipParameters(password);
        compressDir(sourceDir, zipFile, zipParameters);
    }

    /**
     * 压缩文件夹
     *
     * @param sourceDir     待压缩的文件夹
     * @param zipFile       压缩对象
     * @param zipParameters 压缩参数
     * @throws IOException 异常
     */
    public static void compressDir(File sourceDir, ZipFile zipFile, ZipParameters zipParameters) throws IOException {
        zipFile.addFolder(sourceDir, zipParameters);
        zipFile.close();
    }

    /**
     * 压缩文件夹,并分割
     *
     * @param sourceDir   待压缩的文件夹
     * @param descZipFile 压缩的文件
     * @param splitLength 分割单位是字节 1024 * 1024 * 10; //10MB
     * @throws IOException 异常
     */
    public static void compressDirSplit(File sourceDir, File descZipFile, int splitLength) throws IOException {
        compressDirSplit(sourceDir, descZipFile, null, splitLength);
    }

    /**
     * 压缩文件夹,并分割
     *
     * @param sourceDir   待压缩的文件夹
     * @param descZipFile 压缩的文件
     * @param password    密码
     * @param splitLength 分割单位是字节 1024 * 1024 * 10; //10MB
     * @throws IOException 异常
     */
    public static void compressDirSplit(File sourceDir, File descZipFile, String password, int splitLength) throws IOException {
        ZipFile zipFile = getZipFile(descZipFile, password);
        ZipParameters zipParameters = getZipParameters(password);
        compressDirSplit(sourceDir, zipFile, zipParameters, splitLength);
    }

    /**
     * 压缩文件夹,并分割
     *
     * @param sourceDir     待压缩的文件夹
     * @param zipFile       压缩对象
     * @param zipParameters 压缩参数
     * @param splitLength   分割单位是字节 1024 * 1024 * 10; //10MB
     * @throws IOException 异常
     */
    public static void compressDirSplit(File sourceDir, ZipFile zipFile, ZipParameters zipParameters, int splitLength) throws IOException {
        zipFile.createSplitZipFileFromFolder(sourceDir, zipParameters, true, splitLength);
        zipFile.close();
    }

    /**
     * 提取一个文件
     *
     * @param sourceZipFile   待解压的文件
     * @param fileName        要提取的文件名
     * @param destinationPath 解压路径
     * @throws ZipException 异常
     */
    public static void extractFile(String sourceZipFile, String fileName, String destinationPath) throws ZipException {
        extractFile(sourceZipFile, fileName, destinationPath, null);
    }

    /**
     * 提取一个文件
     *
     * @param sourceZipFile   待解压的文件
     * @param fileName        要提取的文件名
     * @param destinationPath 解压路径
     * @param password        密码
     * @throws ZipException 异常
     */
    public static void extractFile(String sourceZipFile, String fileName, String destinationPath, String password) throws ZipException {
        ZipFile zipFile;

        if (password == null || password.trim() == "") {
            zipFile = new ZipFile(sourceZipFile);
        } else {
            zipFile = new ZipFile(sourceZipFile, password.toCharArray());
        }

        zipFile.extractFile(fileName, destinationPath);
    }

    /**
     * 解压所有文件
     *
     * @param sourceZipFile   待解压的文件
     * @param destinationPath 解压路径
     */
    public static void extractAll(String sourceZipFile, String destinationPath) throws ZipException {
        extractAll(sourceZipFile, destinationPath, null);
    }

    /**
     * 解压所有文件
     *
     * @param sourceZipFile   待解压的文件
     * @param destinationPath 解压路径
     * @param password        密码
     */
    public static void extractAll(String sourceZipFile, String destinationPath, String password) throws ZipException {
        ZipFile zipFile;

        if (password == null || password.trim() == "") {
            zipFile = new ZipFile(sourceZipFile);
        } else {
            zipFile = new ZipFile(sourceZipFile, password.toCharArray());
        }

        zipFile.extractAll(destinationPath);
    }

    /**
     * 压缩文件
     *
     * @param descZipFile 文件
     * @return 压缩对象
     */
    public static ZipFile getZipFile(File descZipFile) {
        return getZipFile(descZipFile, null);
    }

    /**
     * 压缩文件
     *
     * @param descZipFile 文件
     * @param password    密码
     * @return 压缩对象
     */
    public static ZipFile getZipFile(File descZipFile, String password) {
        ZipFile zipFile;

        if (password == null || password.trim() == "") {
            zipFile = new ZipFile(descZipFile);
        } else {
            zipFile = new ZipFile(descZipFile, password.toCharArray());
        }

        return zipFile;
    }

    /**
     * 压缩参数
     *
     * @return 压缩参数
     */
    public static ZipParameters getZipParameters() {
        return getZipParameters(null);
    }

    /**
     * 压缩参数
     *
     * @param password 密码
     * @return 压缩参数
     */
    public static ZipParameters getZipParameters(String password) {
        ZipParameters zipParameters = new ZipParameters();

        if (password == null || password.trim() == "") {
            zipParameters.setEncryptionMethod(EncryptionMethod.NONE);
        } else {
            zipParameters.setEncryptFiles(true);
            zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
            zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD);
        }

        return zipParameters;
    }

}






© 2015 - 2024 Weber Informatics LLC | Privacy Policy