java zip压缩文件

java 生成zip压缩文件

1、zip压缩文件


文章目录

  • java 生成zip压缩文件
  • 一、引入jar包
  • 二、工具类
    • 1.有密码压缩
    • 2.无密码压缩
    • 3. 解压方法
  • 三、示例
    • 3.1、压缩前
    • 3.2、调用压缩方法
    • 3.3、压缩后
  • 四、总结


一、引入jar包

这里使用zip4j jar包进行压缩,使用最新的2.11.1版本,可联网下载。

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

二、工具类

1.有密码压缩

代码如下(示例):

public static void zip4jWithPassword(String zipFileName, String inputPath,String password){
        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setEncryptFiles(true);
        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
        zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
        try {
            new net.lingala.zip4j.ZipFile(zipFileName,password.toCharArray()).addFolder(new File(inputPath),zipParameters);
        } catch (ZipException e) {
            throw new RuntimeException(e);
        }
    }

2.无密码压缩

代码如下(示例):

public static void zip4jWithNoPassword(String zipFileName, String inputPath ){
        ZipParameters zipParameters = new ZipParameters();
        try {
            new net.lingala.zip4j.ZipFile(zipFileName).addFolder(new File(inputPath),zipParameters);
        } catch (ZipException e) {
            throw new RuntimeException(e);
        }
    }

3. 解压方法

代码如下(示例):

    /**
     * 使用给定密码解压指定的ZIP压缩文件到指定目录
     * 如果指定目录不存在,可以自动创建,不合法的路径将导致异常被抛出
     * @param zip 指定的ZIP压缩文件
     * @param dest 解压目录
     * @param passwd ZIP文件的密码
     * @return 解压后文件数组
     * @throws ZipException 压缩文件有损坏或者解压缩失败抛出
     */
    public static File [] unzip(String zip, String dest, String passwd) throws ZipException {
        File zipFile = new File(zip);
        return unzip(zipFile, dest, passwd);
    }

    /**
     * 使用给定密码解压指定的ZIP压缩文件到当前目录
     * @param zip 指定的ZIP压缩文件
     * @param passwd ZIP文件的密码
     * @return  解压后文件数组
     * @throws ZipException 压缩文件有损坏或者解压缩失败抛出
     */
    public static File [] unzip(String zip, String passwd) throws ZipException {
        File zipFile = new File(zip);
        File parentDir = zipFile.getParentFile();
        return unzip(zipFile, parentDir.getAbsolutePath(), passwd);
    }

    /**
     * 使用给定密码解压指定的ZIP压缩文件到指定目录
     * 

* 如果指定目录不存在,可以自动创建,不合法的路径将导致异常被抛出 * @param dest 解压目录 * @param passwd ZIP文件的密码 * @return 解压后文件数组 * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 */ public static File [] unzip(File zipFile, String dest, String passwd) throws ZipException { ZipFile zFile = new ZipFile(zipFile); // zFile.setFileNameCharset("GBK"); if (!zFile.isValidZipFile()) { throw new ZipException("压缩文件不合法,可能被损坏."); } File destDir = new File(dest); if (destDir.isDirectory() && !destDir.exists()) { destDir.mkdir(); } if (zFile.isEncrypted()) { zFile.setPassword(passwd.toCharArray()); } zFile.extractAll(dest); List<FileHeader> headerList = zFile.getFileHeaders(); List<File> extractedFileList = new ArrayList<File>(); for(FileHeader fileHeader : headerList) { if (!fileHeader.isDirectory()) { extractedFileList.add(new File(destDir,fileHeader.getFileName())); } } File [] extractedFiles = new File[extractedFileList.size()]; extractedFileList.toArray(extractedFiles); return extractedFiles; }


三、示例

3.1、压缩前

java zip压缩文件_第1张图片

3.2、调用压缩方法

public class test {
    public static void main(String[] args) {
        String inputFile = "D:\\zip压缩";
        String zipFile = "D:\\zip压缩\\测试文件.zip";
        ZipUtilAdmin.zip4jWithPassword(zipFile,inputFile,"123456789");
    }
}

3.3、压缩后

java zip压缩文件_第2张图片

四、总结

无密码压缩可仿照有密码压缩样例自行进行测试。zip4j jar包有多个版本,建议使用最新版本,低版本可能不支持本文写法。本文介绍的压缩方法是带目录的压缩,压缩后带一层目录,见下图:java zip压缩文件_第3张图片
并且本方法压缩后的路径可自行定义。

你可能感兴趣的:(java生成各类文件,java,开发语言)