Zip压缩和解压并解决资源占用问题

在我们常用的文件上传下载,或者多个脚本服务器本地压缩生成的过程中,经常会用到zip压缩和解压方法

平常我们用的zip工具类一般都是java.util.zip包内的解压缩代码,这个构建内的代码虽然也能解决我们的压缩和解压方法,但是如果我们希望删除刚刚生成的zip包,或者某个zip包被java.util.zip内的解压方法解压一遍之后,如果我们的系统进程还在运行的话,就会出现无法删除压缩包,压缩包被Java(TM) resouce占用的情况

经过在网上的搜索,给出的原因基本上都是zip包在压缩和解压过程中,inputStream和outputStream流未释放干净,从而导致文件资源被占用无法删除

不少网站上虽然贴出来不少释放资源的解决方案,但是基本上代码都比较复杂,而且只解决了压缩的资源释放故障,未解决解压的资源释放问题

经过我在stackoverflow上搜索过的答案,给大家提出一个新的比较干净简洁的解决思路,而且能够在解压缩zip包的基础之上,干净的释放占用资源

请容我介绍简洁解压缩接口依赖zip4j

依赖配置为
<dependency>
            <groupId>net.lingala.zip4j</groupId>
            <artifactId>zip4j</artifactId>
            <version>1.3.2</version>
        </dependency>

 

代码如下,非常的简洁和方便,大家可以尝试使用:

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
public static void zip(String targetPath, String destinationFilePath, String password) {
    try {
        ZipParameters parameters = new ZipParameters();
        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

        if(password.length()>0){
            parameters.setEncryptFiles(true);
            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
            parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
            parameters.setPassword(password);
        }

        ZipFile zipFile = new ZipFile(destinationFilePath);

        File targetFile = new File(targetPath);
        if(targetFile.isFile()){
            zipFile.addFile(targetFile, parameters);
        }else if(targetFile.isDirectory()){
            zipFile.addFolder(targetFile, parameters);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void unzip(String targetZipFilePath, String destinationFolderPath, String password) {
    try {
        ZipFile zipFile = new ZipFile(targetZipFilePath);
        if (zipFile.isEncrypted()) {
            zipFile.setPassword(password);
        }
        zipFile.extractAll(destinationFolderPath);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当Python解zip文件时出现[Errno 13] Permission denied错误,这通常是由于文件或目录的权限问题引起的。这意味着你没有足够的权限来读取或写入文件。 解决问题的方法有以下几种: 1. 确保你有足够的权限来读取和写入文件。你可以尝试使用管理员权限运行Python脚本或更改文件的权限。 2. 确保文件没有被其他程序占用。如果其他程序正在使用该文件,Python将无法读取或写入该文件。你可以尝试关闭其他程序或等待它们释放文件。 3. 确保文件路径是正确的。如果文件路径不正确,Python将无法找到文件并读取或写入它。请检查文件路径是否正确,并确保文件存在。 4. 如果你正在使用Python的zipfile模块解压缩zip文件,请确保你有足够的权限来读取和写入目标文件夹。你可以尝试更改目标文件夹的权限或将文件解压缩到具有足够权限的文件夹中。 5. 如果你正在使用第三方库进行zip文件解压缩,请确保你已正确安装该库,并按照库的文档提供的方法使用它。 下面是一个示例代码,演示了如何使用Python的zipfile模块解压缩zip文件: ```python import zipfile zip_file = "path/to/your/zip/file.zip" extract_folder = "path/to/extract/folder" try: with zipfile.ZipFile(zip_file, 'r') as zip_ref: zip_ref.extractall(extract_folder) print("解压缩成功!") except PermissionError: print("解压缩失败:权限被拒绝!") except FileNotFoundError: print("解压缩失败:文件不存在!") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值