Java Zip/Unzip Files 记录

Java I/O流 复制文件速度对比 Java I/O流 复制文件速度对比 推荐阅读 为什么阿里的程序员成长如此之快?看完Alibaba“Java成长笔记”我懂了!_马小梦的博客-优快云博客​blog.csdn.net 2020锤爆35K月薪的MySQL面试笔记解析:索引+优化+锁+慢查询+事务 推荐观看 大厂面试真题集结地:阿里三面+腾讯二面+支付宝三面+拼多多二面+字节四面+淘宝五面_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 厉害了!B站最全网络底层汇总:... 阅读详情

最近项目中使用Java实现zip/unzip XML文件的功能,Java自带的API可以方便实现文件的压缩和解压缩,记录一下相关代码。

  1. 以源文件名zip压缩源文件到目标文件
public void zip(File src, File dest){
    InputStream in = null; 
    ZipOutputStream zos= null;
    try { 
        zos = new ZipOutputStream(new FileOutputStream(dest));
        ZipEntry ze= new ZipEntry(src.getName());
        zos.putNextEntry(ze);
        in = new FileInputStream(src);
        IOUtils.copy(in,zos); 
    } catch (IOException e) {
        LOG.error("fail to zip file: " + src.getName() + " to : " + dest.getName()); 
        throw e;
    } finally {
        if(null != zos){
            try {
                zos.closeEntry();
            } catch (IOException ex){
            }
        }
        IOUtils.closeQuietly(in);
        IOUtils.closeQuietly(zos);
}
  1. 从源文件zip解压所有文件到目标文件夹
 public void unZip(File file, String outputFolder){ 
     File folder = new File(outputFolder);
     if(folder.exists() && folder.isFile()){ 
         throw IllegalArgumentException("Not an exists folder"); 
     }
     //create output directory is not exists
     if(!folder.exists() && !folder.mkdir()){
         throw IllegalStatusException("fail to create dest folder");
     }
     InputStream in = null; OutputStream out = null;
     ZipFile zipFile = new ZipFile(file); 
     Enumeration emu = zipFile.entries();
     while(emu.hasMoreElements()){
           ZipEntry entry = (ZipEntry)emu.nextElement();
           //建立目录
           if (entry.isDirectory()){
                new File(outputFolder + entry.getName()).mkdirs();
                    continue;
           }
           //文件拷贝
           InputStream is = zipFile.getInputStream(entry);
           File file = new File(outputFolder + entry.getName());
           //注意:zipfile读取文件是随机读取的,可能先读取一个文件,再读取文件夹,所以可能要先创建目录
           File parent = file.getParentFile();
           if(parent != null && (!parent.exists())){
               parent.mkdirs();
           }
           out = new FileOutputStream(file);
           IOUtils.closeQuietly(in);
           IOUtils.closeQuietly(out);
       } 
    }catch(IOException ex){
       LOG.error(ex.getMessage());
       throw ex;
    } finally {
       if(null != zipFile){
           try{
               zipFile.close();
           } catch (IOException e) {

           }
       }
       IOUtils.closeQuietly(in);
       IOUtils.closeQuietly(out);
    } 
}

这代码最主要就是文件太大的话,IOUtils的copy耗CPU比较高。

从CTF到实战:Unzip软连接漏洞原理、利用与防御全解析 文件上传与解压是Web应用中的常见功能,其背后涉及文件系统操作与用户输入处理的信任边界问题。符号链接(软连接)作为文件系统的基础特性,允许一个文件指向另一个文件或目录的路径。当应用程序在处理用户上传的压缩包时,若直接调用系统解压命令(如unzip)且未对压缩包内容进行安全检查,攻击者可构造包含恶意符号链接的压缩包。解压过程中,这些链接可能在服务器上被创建,指向如/etc/passwd等敏感文件。利用Web服务器对生成文件的访问权限,攻击者便能实现敏感信息读取,甚至可能进一步篡改系统配置或获取服务器权限,形成 阅读详情

相关推荐

Java压缩文件夹实战:解决EOCD缺失与中文名乱码

ZIP是一种遵循严格字节结构的归档格式,其核心依赖EOCD(End of Central Directory)标识和Central Directory元数据组织。Java原生zip API(java.util.zip)本质是底层字节流操作工具,不自动处理路径分隔符、文件名编码、符号链接或空目录占位等关键问题。技术价值在于保障跨平台解压兼容性与生产稳定性;典型应用场景包括金融系统日志归档、IoT固件分发、教育SaaS资源包打包。本文聚焦Java压缩文件夹时高频出现的'invalid zip archive:

weixin_34268753的博客 372

这17个小工具,让我的开发效率提升了50%

在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的:。如果在我们的日常工作当中,能够将这些轮子用户,再配合一下idea的快捷键,可以极大得提升我们的开发效率。今天我决定把一些压箱底的小工具,分享给大家,希望对你有所帮助。本文会分享17个我们日常工作中一定会用得到的小工具,主要内容如下: 首先出场的是包下的类,该类主要用于操作集合或者返回集合,我个人非常喜欢用它。在工作中经常有对集合排序的需求。看看使用工具是如何实现升序和降序的: 执行结果: 1.2 获取最大或最小值 有时候需要找

Firstlucky77的博客 694

Java POI Zip炸弹检测机制详解:原理、配置与安全实践

在Java后端开发中,文件上传与处理是常见需求,而安全威胁如Zip炸弹攻击常被忽视。Zip炸弹是一种通过极高压缩比构造的恶意文件,旨在耗尽服务器资源,引发拒绝服务。Apache POI库内置了ZipSecureFile安全机制,通过检查最小压缩比率、最大条目大小等阈值来防御此类攻击。理解压缩原理与安全检测逻辑,对于构建健壮的文件处理系统至关重要。本文以POI处理Excel/Word文件时遇到的“Zip bomb detected”错误为切入点,深入解析其检测原理,并提供全局配置、局部调整等实战方案,帮助开发

weixin_34126557的博客 324

IOUtils快速进行内容复制与常用方法

在下面的例子,我们将详细说明如何使用 org.apache.commons.io 包中的 IOUtils类如何使用,通过包名我们可以知道它是 Apache Commons IO 的一部分 。该类的所有成员函数都被用来处理输入 - 输出流,它的确非常利于来编写处理此类事务的程序。IOUtils与其他Apache Commons中的类一样,都是处理IO操作的非常重要包装器,与手动编写这些功能的其他程序相比,它们实现这些方法的代码变得更小,更清晰,更易理解 apache.commons.io.IOUtils o

学习 记录 总结 分享 4954

ZIP协议深度解析:文件结构、Deflate状态机与跨平台兼容性

ZIP是一种广泛使用的归档协议,而非单一压缩算法;其核心由文件结构(EOCD/CDR/Local Header)、Deflate压缩机制(LZ77滑动窗口与Huffman编码协同)及元数据管理三者耦合构成。理解ZIP需从字节级布局出发——如EOCD定位机制决定随机访问能力,ZIP64扩展实现4GB+兼容,而Deflate块的状态机(BFINAL/BTYPE)和Huffman树重建规则直接影响解压鲁棒性。该协议在嵌入式OTA、邮件网关、金融数据交换等场景中承担关键传输职能,对内存受限环境、流式解压、UTF-8

weixin_40192258的博客 481

zlib、gzip与zip核心原理全解析:从DEFLATE算法到EOCD错误排查

数据压缩是计算机科学中的基础技术,其核心原理在于通过算法消除数据冗余,减少存储空间和网络传输量。DEFLATE算法结合了LZ77字典编码和霍夫曼编码,实现了高效的无损压缩,成为众多压缩格式的基石。在工程实践中,zlib库提供了DEFLATE算法的高效实现,作为底层引擎被广泛集成。基于zlib构建的gzip格式专注于单文件压缩,常用于HTTP传输优化和日志归档;而zip格式则在此基础上增加了多文件归档和中央目录索引功能,支持随机访问和跨平台交换。理解这些核心概念和层级关系,能帮助开发者有效处理日常开发中遇到的

weixin_34159110的博客 1851

Java IOUtils.copy()的使用

被复制文件先转化为字节数组

方.丈之间的博客 1319

彻底解决Zip文件跨平台解压乱码:字符编码原理与实战方案

字符编码是计算机存储和处理文本的基础规则,它定义了字符与二进制数据之间的映射关系。在文件压缩领域,不同编码标准(如GBK、UTF-8)的混用是导致跨平台文件交换问题的核心根源。Zip文件格式因其历史设计,长期缺乏强制性的编码规范,使得文件名在不同操作系统(Windows、macOS、Linux)和压缩工具间出现乱码,直接影响自动化脚本、数据迁移和协作流程的可靠性。理解编码原理后,通过检查Zip文件的UTF-8标志位、使用支持强制UTF-8的现代工具(如7-Zip的`-mcu=on`参数),并统一团队工作流,

weixin_30245867的博客 427

JAVA实现压缩解压文件

JAVA实现压缩解压文件

xingchenyv的博客 1万+

zip压缩包全流程处理:从损坏修复、分卷合并到部署落地的实战指南

压缩包作为软件交付和传输的通用载体,其完整性直接影响部署效率。zip文件通过中央目录与EOCD记录组织数据,一旦文件头缺失或尾部EOCD损坏,就会遇到 file is not a zip file 或 could not find eocd 等报错。理解zip底层结构,利用zip -FF修复、分卷合并、编码转换与密码恢复等技巧,可以解决项目交付包从解压到落地的绝大多数问题。无论是处理mysql-8.0.46-winx64.zip 免安装部署,还是应对Java环境路径中的中文乱码(如d:\tools\idea

weixin_33755557的博客 522

myeclipse-2021.5.24a.zip解压安装实战:从EOCD报错到JDK配置全攻略

ZIP作为跨平台兼容性最好的压缩格式,在开发工具分发和绿色软件部署中扮演着核心角色。无论是IDE安装包还是项目依赖资源,解压前进行文件完整性校验都是避免后续报错的关键——常见错误如“invalid zip archive: could not find EOCD”,本质上是ZIP中央目录索引缺失,多由下载不完整、传输损坏或分卷文件不完整引起。理解ZIP结构原理,掌握7-Zip、命令行unzip及zip -FF修复等工具链,能大幅提升开发环境搭建效率。在大体积IDE安装、内网离线部署、多版本切换等场景中,ZI

weixin_30731305的博客 458

java 下载g文件后解压密码_Java解压和压缩带密码的zip文件过程详解

前言JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名。为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzipaes开源项目。该项目在google code下托管,仅支持AES压缩和解压zip文件(This library only supports Win-Zip's 256-Bit AES mode.)...

weixin_42416398的博客 465

zip文件损坏与修复全指南:从EOCD缺失到乱码分卷的实战排查

在工程协作与源码交付中,zip压缩包是最常见的文件封装格式,但“File is not a zip file”“could not find eocd”等报错频频出现,背后往往隐藏着文件截断、编码错乱或分卷缺失等深层问题。理解zip的EOCD结构、校验机制与跨平台兼容性,是高效排查的基础。本文从压缩包原理出发,详解如何用file命令识别真实格式、用unzip -t验证完整性、用zip -FF修复损坏包,并覆盖Linux下GBK乱码、z01分卷合并、加密包密码恢复等高频场景,最终将知识落地到飞控SDK这类大型

weixin_33970449的博客 411

已解决Java程序生成ZIP文件,WinRAR解压报错“不可预料的压缩文件末端”的排查与修复指南

本文详细解析了Java程序生成ZIP文件时WinRAR解压报错“不可预料的压缩文件末端”的原因及解决方案。通过分析流未正确关闭、编码问题、内存溢出和多线程并发写入等常见问题,提供了完整的流关闭模板、内存优化方案和编码统一方案等最佳实践,帮助开发者彻底解决这一常见异常。

weixin_34275734的博客 310

Oracle安装包zip解压与安装报错全解析:从EOCD到ORA-28547

在数据库部署与运维中,基于zip格式分发的安装介质已成为跨平台交付的通用标准,其解压后的目录结构、校验逻辑与安装前置条件直接决定后续流程能否顺畅推进。不少开发者初次接触Oracle时,常因压缩包完整性校验缺失而遭遇“file is not a zip file问题所在”或“导入失败caused by: invalid zip archive: could not find eocd”等典型错误,这些现象本质上源于文件下载不完整、格式误判或EOCD记录缺失。理解zip与iso、exe的差异,掌握哈希校验、解压

weixin_30325971的博客 455

zip压缩包全攻略:从解压报错到密码恢复与跨平台实操

zip作为跨平台最通用的归档格式,在安全测试工具包分发、离线软件部署等场景中被广泛使用。然而,文件损坏、编码错乱、密码遗忘等问题频繁导致解压失败。理解zip的EOCD结构、全局方式位标记和加密机制(ZipCrypto/AES-256),是定位“could not find eocd”、文件名乱码等问题的关键。借助file命令、zip -FF修复、zip2john与hashcat等工程化手段,可有效应对校验失败、密码恢复与分卷解压。本文基于渗透测试与开发环境搭建的实践经验,梳理从下载校验、解压修复到跨平台安装

weixin_34409357的博客 375

Linux压缩命令实战:从tar、zip到7z的完整指南与避坑经验

在Linux系统管理与运维中,文件压缩与归档是基础且关键的操作。其核心原理是通过特定算法减少文件体积,以节省存储空间、加速网络传输并实现高效备份。从技术价值看,掌握压缩命令不仅能提升日常工作效率,更是应对磁盘空间告急、数据迁移等紧急场景的必备技能。常见的应用场景包括日志归档、软件分发、跨平台文件交换以及长期数据存储。本文聚焦于Linux下最常用的压缩工具,深入解析tar命令的打包与压缩分离机制,对比gzip、bzip2、xz等算法的性能差异,并针对实际运维中高频出现的“invalid zip archive

weixin_30908103的博客 301

Oracle安装包.zip解密:从解压报错到安装运维全指南

数据库安装是运维与开发的基本功,而Oracle作为企业级关系型数据库的常青树,其安装包的处理却常让人头疼。一个名为“Oracle安装包.zip”的文件,可能隐藏着二次压缩、文件损坏甚至伪装恶意程序等风险。压缩包完整性校验是第一步,哈希值比对、正确选择解压工具、避免中文路径都能显著降低失败概率。面对“EOCD not found”或CRC校验错误,理解zip结构原理有助于快速定位问题。安装阶段则会遇到ora-28547监听配置错误、JDK版本不匹配等高频陷阱。装好之后,等保基线加固、数据泵导出导入、分页SQL

weixin_30386713的博客 428
上一篇: Java与XML的故事一:通过XSD生成Java类
下一篇: Shiro security限制登录尝试次数
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值