当前位置: 首页 > 工具软件 > ZIP4J > 使用案例 >

java使用zip4j 解压与压缩zip包

解河
2023-12-01

1. 下载 net.lingala.zip4j jar包

 <!--zip压缩工具包-->
        <dependency>
            <groupId>net.lingala.zip4j</groupId>
            <artifactId>zip4j</artifactId>
            <version>2.11.1</version>
        </dependency>

2.具体使用代码

/**
     * 压缩文件
     * @param targetFile
     * @throws ZipException
     */
    public static void zipAll(File targetFile, String sourceDirectory) throws ZipException {
        // 生成的压缩文件
        ZipFile zipFile = new ZipFile(targetFile);
        ZipParameters parameters = new ZipParameters();
        // 压缩方式
        parameters.setCompressionMethod(CompressionMethod.DEFLATE);
        // 压缩级别
        parameters.setCompressionLevel(CompressionLevel.NORMAL);
        // 要打包的文件夹
        File currentFile = new File(sourceDirectory);
        File[] fs = currentFile.listFiles();
        // 遍历test文件夹下所有的文件、文件夹
        for (File f : fs) {
            if (f.isDirectory()) {
                zipFile.addFolder(f, parameters);
            } else {
                zipFile.addFile(f, parameters);
            }
        }
    }

    /**
     * 解压文件
     * @param sourceFile
     * @param targetDirectory
     */
    public static void unzipAll(File sourceFile, String targetDirectory) throws ZipException{

        // 如果targetDirectory为空 说明是子文件夹 直接使用传进来的 sourceFile
        if (StringUtils.isBlank(targetDirectory)){
            targetDirectory = sourceFile.getAbsolutePath();
        }
        ZipFile zipFile = new ZipFile(sourceFile);
        if (isZipFile(targetDirectory)){
            targetDirectory = targetDirectory.substring(0, targetDirectory.length() - 4);
        }
        File parentFile = new File(targetDirectory);
        if (parentFile.exists()){
            FileUtils.deleteAllFiles(parentFile);
            parentFile.mkdirs();
        }
        zipFile.setCharset(Charset.forName("GBK"));

        // 解压
        zipFile.extractAll(targetDirectory);
        CloseStream.closed(zipFile);

        // 遍历
        List<File> fileList = new ArrayList<>();
        // 获取父目录下所有文件
        fileList = parentFile.isDirectory()? Arrays.asList(parentFile.listFiles()):fileList;
        for (File fileItem : fileList){
            if (fileItem.isFile()&& (isZipFile(fileItem.getAbsolutePath()))){
                unzipAll(fileItem,null);
            }
        }

    }

    /**
     * 判断文件路径是否包含zip
     * @param filePath
     * @return
     */
    public static boolean isZipFile(String filePath){
        return filePath.endsWith(ZIP.toLowerCase()) || filePath.endsWith(ZIP.toUpperCase());
    }

!!!解压之后记得关闭zipFile对象!!!

 类似资料: