美文网首页
Zip4j解压文件

Zip4j解压文件

作者: asing1elife | 来源:发表于2019-11-06 13:38 被阅读0次

使用 zip4j 可以快速对文件进行解压缩处理

更多精彩

官网

  1. GitHub - srikanth-lingala/zip4j: A Java library for zip files and streams

特性

  1. 支持Zip文件的创建、添加、解压、更新、移除
  2. 可读写有密码保护的Zip文件
  3. 支持AES 128/256算法加密
  4. 支持标准Zip算法加密
  5. 支持Zip64格式
  6. 支持分块Zip文件的创建和解压
  7. 支持Unicode编码的文件名
  8. 支持进度监控

添加Maven依赖

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

直接解压文件

// 获取Zip文件
ZipFile zipFile = new ZipFile(filePath);
// 指定文件名编码
zipFile.setFileNameCharset("GBK");

// 验证文件有效性
if (!zipFile.isValidZipFile()) {
    return;
}

// 解压目录
File fileDir = new File(destPath);

// 目录不存在则创建
if (fileDir.isDirectory() && !fileDir.exists()) {
    fileDir.mkdir();
}

// 解压
zipFile.extractAll(destPath);

解压并过滤部分文件

解压操作

public void unzipFile(File file, String destPath) throws ZipException, IOException {
    ZipFile zipFile = new ZipFile(file);

    zipFile.setFileNameCharset(“GBK”);

    if (!zipFile.isValidZipFile()) {
        return;
    }

    // 解压目录
    File fileDir = new File(destPath);

    if (fileDir.exists()) {
        FileUtils.deleteDirectory(fileDir);
    }

    if (fileDir.isDirectory() && !fileDir.exists()) {
        fileDir.mkdir();
    }

    // 解压之前先过滤
    filterZipFile(zipFile, destPath);
}

过滤文件

private void filterZipFile(ZipFile zipFile, String destPath) throws ZipException {
    List fileHeaders = zipFile.getFileHeaders();

    for (Object objFileHeader : fileHeaders) {
        FileHeader fileHeader = (FileHeader) objFileHeader;
        String fileName = fileHeader.getFileName();

        // 匹配到是需要过滤的文件则跳过
        if (isIllegalFile(fileName)) {
            continue;
        }

        // 匹配到隐藏文件则跳过
        if (isHiddenFile(fileName)) {
            continue;
        }

        zipFile.extractFile(fileHeader, destPath);
    }
}

检测需要过滤的文件

private boolean isIllegalFile(String targetFileName) {
    String[] filterFileNames = new String[]{“node_modules”, “target”, “out”};

    for (String filterFileName : filterFileNames) {
        String fullSourceFileName = String.format("/%s/", filterFileName);

        if (targetFileName.contains(fullSourceFileName)) {
            return true;
        }
    }

    return false;
}

检测隐藏文件

private boolean isHiddenFile(String targetFileName) {
    Pattern hiddenFilePattern = Pattern.compile("/\\.\\w+");
    Matcher matcher = hiddenFilePattern.matcher(targetFileName);

    return matcher.find();
}

压缩文件

public File getOrCreateZipFile(String fullFilePath) {
    File file = new File(fullFilePath);

    // 文件存在
    if (file.exists() && file.isFile()) {
        return file;
    }

    // 从文件路径中截取文件后缀
    int prefixMark = fullFilePath.lastIndexOf(".");
    String filePath = fullFilePath.substring(0, prefixMark);

    // 尝试获取解压后的文件目录
    file = new File(filePath);

    // 不存在则说明确实没有该文件,直接返回
    if (!file.exists()) {
        return file;
    }

    try {
        // 创建压缩包
        ZipFile zipFile = new ZipFile(fullFilePath);
        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
        zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        zipParameters.setIncludeRootFolder(false);

        zipFile.addFolder(file, zipParameters);

        // 将文件从新指定位压缩文件
        file = new File((fullFilePath));
    } catch (ZipException e) {
        logger.error("文件压缩失败,teacherId -> {}, fullFilePath -> {}", super.getMemberId(), fullFilePath);

    }

    return file;
}

相关文章

  • Zip4j解压文件

    使用 zip4j 可以快速对文件进行解压缩处理 更多精彩 更多技术博客,请移步 IT人才终生实训与职业进阶平台 -...

  • zip4j 2 解压缩

    zip4j 版本2.2.4 压缩 ZipFile zipFile =new ZipFile(zipPath); Z...

  • shell解压命令

    解压全部 gz文件:gunzip *g 解压zip文件: unzip xxx.zip 解压tar.gz文件:tar...

  • Android zip4j压缩、解压、加解密

    jdk有原生的zip包,因为用起来没有达到想要的效果,所以此次用的是第三方zip4j开源zip4j.jar官网下载...

  • 解压文件

    .bz解压1:bzip2 -d FileName.bz解压2:bunzip2 FileName.bz .bz2解压...

  • 解压文件

    不使用BufferedOutputStream的情况 引入读取输入流,并不知道会读多少字节数据,如果将byte数组...

  • iOS中解压rar文件

    iOS中基于UnrarKit解压rar文件 iOS中解压rar文件,使用UnrarKit框架解压,框架github...

  • 文件复制/解压

    //--------------------复制文件 //--------------------解压文件------

  • Mac 配置Tomcat 8.5.11

    下载Tomcat Tomcat下载地址 复制文件 解压刚才下载的 zip 包.解压文件 将解压的apache-to...

  • word文档操作

    @压缩压下面的那个,解压要解压到文件目录,这样解压的文件都在文件目录里。 @文件里有新建,保存,另存,保存类型一般...

网友评论

      本文标题:Zip4j解压文件

      本文链接:https://www.haomeiwen.com/subject/jvdubctx.html