java创建压缩文件方法(包括文件夹下包含文件夹)

Oracle19c-集群节点重新添加 Oracle RAC集群在极端情况下,如硬件、主机,集群软件损坏,导致集群节点永久无法使用,需要对集群节点进行修复,删除节点集群信息并重新加入集群,以恢复集群原有的架构。 本文主要讲述一套两节点的Oracle19c RAC集群,节点一orcl01由于主机异常无法正常启动,在对主机进行重装之后,需要将orcl01节点重新加入集群的操作步骤。环境信息: 操作系统:Linux 7 RAC集群:19C 主机节点:orcl0... 阅读详情

最近需要用到Java的zip文件压缩与解压缩,找了一堆的资料和参考代码,没有一个能够很好的解决问题。要不就是压缩出错,要不就是压缩后的文件目录组织不正确,要不就是中文乱码,总之问题一大堆。没办法只能自己编码搞定。

java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现apache有个包提供一些简单的方法来实现zip文件的压缩与解压缩http://ant.apache.org/。下载地址:org.apache.tools.zip

如果上面的链接找不到的话也可使用这个链接 http://www.java2s.com/Code/Jar/a/Downloadapacheantzipjar.htm

下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。

 

要压缩成zip文件,涉及到的问题如下:

1.将要压缩的文件添加到zip文件包中。

2.组织好要压缩的文件目录与压缩后的zip文件目录一致。

3.文件名以及文件夹名中文字符编码。

4.解压缩zip文件,并将解压缩后的文件及文件夹的组织形式要与压缩前的一致。

 

在设计该类的时候,我编写了一下几个方法:

第一个zip方法,将来填入要压缩的文件或文件夹路径,然后压缩成zip文件并保存到指定位置。代码如下:

 1 /**
 2 * 压缩文件或者文件夹压缩采用gb2312编码,其它编码方式可能造成文件名与文件夹名使用中文的情况下压缩后为乱码。。。
 3  *
 4* @param source
 5 *            要压缩的文件或者文件夹
 6 *           建议使用"c:/abc"或者"c:/abc/aaa.txt"这种形式来给定压缩路径
 7  *            使用"c:\\abc"或者"c:\\abc\\aaa.txt"这种形式来给定路径的话,可能导致出现压缩和解压缩路径意外故障。。。
 8  * @param zipFileName
 9 *            压缩后的zip文件名称压缩后的目录组织与windows的zip压缩的目录组织相同。
10  *            会根据压缩的目录的名称,在压缩文件夹中创建一个改名的根目录,其它压缩的文件和文件夹都在该目录下依照原来的文件目录组织形式
11  * @throws IOException
12  *            压缩文件的过程中可能会抛出IO异常,请自行处理该异常。
13  */
14  publicstaticvoid ZIP(String source,String zipFileName)
15         throws IOException {
16     ZipOutputStream zos = new ZipOutputStream(new File(zipFileName));
17  
18     // 设置压缩的时候文件名编码为gb2312
19     zos.setEncoding("gb2312");
20     //System.out.println(zos.getEncoding());
21  
22     File f = new File(source);
23  
24     if (f.isDirectory()) {
25         // 如果直接压缩文件夹
26         ZIPDIR(source, zos,f.getName() + "/");// 此处使用/来表示目录,如果使用\\来表示目录的话,会导致压缩后的文件目录组织形式在解压缩的时候不能正确识别。
27     } else {
28         // 如果直接压缩文件
29         ZIPDIR(f.getPath(), zos, newFile(f.getParent()).getName() + "/");
30         ZIPFile(f.getPath(), zos, newFile(f.getParent()).getName() + "/"
31                 + f.getName());
32     }
33  
34     zos.closeEntry();
35     zos.close();
36 }

为了很好的解决中文编码问题,这里在创建ZipOutputStream输出流的时候就指定其编码为gb2312,这样无论将来是中文的文件名和文件夹,都可以被正确的识别,不会出现乱码的情况。

特别提醒大家注意的是,文件的路径使用的斜杠最好是"/",如果用"\\"来表示路径的话,表面上看这是区分好了文件夹,其实在解压缩的时候zipfile对象就不能很好的识别其为文件夹,有可能将其识别为文件,导致解压出错。这里是个关键点!

第二个ZIPFile方法,专门将指定的文件压缩成为zip文件的方法。代码如下:

 1 /**
 2 * zip 压缩单个文件。除非有特殊需要,否则请调用ZIP方法来压缩文件!
 3  *
 4* @param sourceFileName
 5 *            要压缩的原文件
 6  * @param zipFileName
 7 *            压缩后的文件名
 8  * @param zipFileName
 9 *            压缩后的文件名
10  * @throws IOException
11  *            抛出文件异常
12  */
13 publicstaticvoid ZIPFile(String sourceFileName, ZipOutputStream zos,
14         String tager) throws IOException {
15     //System.out.println(tager);
16     ZipEntry ze = new ZipEntry(tager);
17     zos.putNextEntry(ze);
18  
19     // 读取要压缩文件并将其添加到压缩文件中
20     FileInputStream fis = new FileInputStream(new File(sourceFileName));
21     byte[] bf = newbyte[2048];
22     int location = 0;
23     while ((location = fis.read(bf)) != -1) {
24         zos.write(bf, 0, location);
25     }
26     fis.close();
27 }

说明:这里写入zip文件流的时候使用了缓存,如果不使用将导致压缩的时间过长。。。(每次从硬盘读取一个字节并写入到zip文件流中,加重了硬盘的负担。。。)

经过我的机器测试,这个缓存设置1024与2048没有太多的性能差别,但是小于1024后就有较大的区别了。所以建议设置为1024或者2048。

第三个ZIPDIR方法,专门在ZIP文件中添加文件夹的方法。代码如下:

 1 /**
 2 * 压缩目录。除非有特殊需要,否则请调用ZIP方法来压缩文件!
 3  *
 4* @param sourceDir
 5 *            需要压缩的目录位置
 6  * @param zos
 7 *            压缩到的zip文件
 8  * @param tager
 9 *            压缩到的目标位置
10  * @throws IOException
11  *            压缩文件的过程中可能会抛出IO异常,请自行处理该异常。
12  */
13 publicstaticvoid ZIPDIR(String sourceDir, ZipOutputStream zos,
14         String tager) throws IOException {
15     //System.out.println(tager);
16     ZipEntry ze = new ZipEntry(tager);
17     zos.putNextEntry(ze);
18     // 提取要压缩的文件夹中的所有文件
19     File f = new File(sourceDir);
20     File[] flist = f.listFiles();
21     if (flist != null) {
22         // 如果该文件夹下有文件则提取所有的文件进行压缩
23         for (File fsub : flist) {
24             if (fsub.isDirectory()) {
25                 //如果是目录则进行目录压缩
26                 ZIPDIR(fsub.getPath(),zos, tager + fsub.getName() + "/");
27             } else {
28                 //如果是文件,则进行文件压缩
29                 ZIPFile(fsub.getPath(), zos,tager + fsub.getName());
30             }
31         }
32     }
33 }

 

说明:这里使用了递归的方式来读取要压缩的文件夹中的下级文件夹,全部将其压到zip文件中,用来组织好将来压缩好的zip文件里面的目录形式。

 

第四个UnZip方法,专门用于解压缩zip文件的方法。代码如下:

 1 /**
 2 * 解压缩zip文件
 3  *
 4* @param sourceFileName
 5 *            要解压缩的zip文件
 6  * @param desDir
 7 *            解压缩到的目录
 8  * @throws IOException
 9 *             压缩文件的过程中可能会抛出IO异常,请自行处理该异常。
10  */
11 publicstaticvoid UnZIP(String sourceFileName, String desDir)
12         throws IOException {
13     // 创建压缩文件对象, 注意指定格式与压缩时同样的格式
14     ZipFile zf = new ZipFile(new File(sourceFileName), "gb2312");
15  
16     // 获取压缩文件中的文件枚举
17     Enumeration<ZipEntry> en= zf.getEntries();
18     int length = 0;
19     byte[] b = newbyte[2048];
20  
21     // 提取压缩文件夹中的所有压缩实例对象
22     while (en.hasMoreElements()) {
23         ZipEntry ze = en.nextElement();
24         //System.out.println("压缩文件夹中的内容:"+ze.getName());
25         //System.out.println("是否是文件夹:"+ze.isDirectory());
26         // 创建解压缩后的文件实例对象
27         File f = new File(desDir +ze.getName());
28         //System.out.println("解压后的内容:"+f.getPath());
29         //System.out.println("是否是文件夹:"+f.isDirectory());
30         // 如果当前压缩文件中的实例对象是文件夹就在解压缩后的文件夹中创建该文件夹
31         if (ze.isDirectory()) {
32             f.mkdirs();
33         } else {
34             //如果当前解压缩文件的父级文件夹没有创建的话,则创建好父级文件夹
35             if(!f.getParentFile().exists()) {
36                 f.getParentFile().mkdirs();
37             }
38  
39             //将当前文件的内容写入解压后的文件夹中。
40             OutputStreamoutputStream = new FileOutputStream(f);
41             InputStream inputStream =zf.getInputStream(ze);
42             while ((length = inputStream.read(b)) > 0)
43                 outputStream.write(b, 0,length);
44  
45             inputStream.close();
46             outputStream.close();
47         }
48     }
49     zf.close();
50 }

解压缩的过程并不复杂,读取zip文件,提取里面的每个zip实体,然后将其解压缩。

如果该zip实体是目录,则在解压到的文件夹中创建文件夹,如果是文件,则在指定的目录中创建文件。

这个zip压缩与解压缩代码基本完毕,写个代码测试一下效果:

 1         try {
 2            long starTime = 0;
 3            long endTime = 0;
 4
 5            // 测试压缩目录
 6             // ZIPDIR("c:\\A",
 7            //"c:\\A.zip");
 8
 9            // 测试压缩单个文件
10             //ZIPFile("c:\\A.txt",
11             // "c:\\A.zip");
12
13             System.out.println("开始压缩...");
14             starTime =System.currentTimeMillis();
15             ZIP("c:\\A",
16                     "c:\\A.zip");
17             endTime =System.currentTimeMillis();
18             System.out.println("压缩完毕!花费时间: " + (endTime - starTime) + " 毫秒!");
19
20             System.out.println("开始解压...");
21             starTime =System.currentTimeMillis();
22             UnZIP("c:\\A.zip",
23                     "c:\\A\\");
24             endTime =System.currentTimeMillis();
25             System.out.println("解压完毕!花费时间: " + (endTime - starTime) + " 毫秒!");
26
27         } catch (Exception ex) {
28             //TODO Auto-generated catch block
29             ex.printStackTrace();
30         }


自己试了下很好用,分享给大家,本文转自百度文库

 

从0到1,快速理清 | DeepSeek Harness DeepSeek推出自研Harness开发平台,主打"一切皆插件"理念,将AI执行能力模块化为可自由组合的插件体系。带你从0到1,快速了解开发链路。 阅读详情

相关推荐

使用网分对晶体ESR/L1/C1/C0进行测量计算

Use R&amp;S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M...

qq_39138630的博客 2085

java创建文件夹和遍历压缩文件夹或者文件

java创建文件夹和遍历压缩文件夹或者文件。

qq_19891197的博客 1103

知识图谱_知识图谱 | 知识图谱做用户画像

导读:最近一直在思考怎么用知识图谱做推荐,但是目前能知道的内容都是基于路径的推荐和基于图特征的推荐,所以能不能换一个角度,探究一下用知识图谱怎么做用户画像,因为画像也是推荐系统重要的一部分。现在的知识图谱+推荐怎么做的传统的用户画像怎么做现在的知识图谱+推荐怎么做的?基于路径:可以理解成基于图谱的多路径召回,或者多路径推荐,然后根据路径的转移概率进行排序从而达到推荐的效果,基于路径比较适合简单的推...

weixin_28801659的博客 1460

使用Java压缩文件生成各种zip包总结(整理为工具类版)

使用Java压缩文件生成各种zip包总结

httpmc2018的博客 1万+

自动驾驶开发者必看:nuscenes数据集23类物体标注全解析(附避坑指南)

本文深入解析nuscenes数据集的23类物体标注系统,为自动驾驶开发者提供全面的标注规范解读和实战避坑指南。涵盖多模态数据组织、类别细分规则、属性系统应用技巧以及标注质量验证方法,帮助开发者高效利用这一标杆数据集提升模型性能。

weixin_29041767的博客 256

ADS 2024实战:手把手教你搞定CGH40010F的Doherty功放仿真与版图(附避坑指南)

本文详细介绍了使用ADS 2024进行CGH40010F Doherty功放从仿真到版图的全流程设计,涵盖器件建模、稳定性分析、负载牵引匹配和版图联合仿真等关键步骤。特别针对新手常见问题提供避坑指南,帮助工程师高效完成射频功放设计,提升5G基站和雷达系统的性能。

weixin_42528191的博客 221

Java实现多级目录文件下载压缩包

Java实现多级目录文件下载压缩包

kdjfh的博客 3255

Vue3项目实战:用vue-print-nb搞定多页表格打印(附样式不丢失解决方案)

本文详细介绍了在Vue3项目中,如何利用vue-print-nb插件解决Element Plus多页表格打印的样式丢失与分页错乱等核心难题。通过分离打印视图、编写专用CSS控制分页行为、以及深入理解浏览器打印原理,提供了一套从基础配置到高级技巧的完整企业级打印解决方案,确保打印输出专业可靠。

linux的博客 1233

Windows里的压缩包在Linux中解压

passwd.gz[root@localhost lianxi]# sz passwd.gz 发送文件到windows --》将linux系统里的文件传输到windows系统[root@localhost ~]# rz 接受从windows系统里传输文件到linux received。

ZhouXin1111112的博客 3134

第10集:AIOps 平台架构设计!画出面试官最想看的系统全景图

本文介绍了如何将AIOps平台的六大功能模块整合为四层架构设计,并生成专业系统全景图。文章首先指出面试中架构设计能力的重要性,强调一张清晰的架构图能直观展现全局观。随后指导读者检查项目结构,准备绘图环境。核心部分详细拆解了四层架构:数据采集层(Prometheus、ELK等)、AI分析层(巡检、告警、预测等)、决策执行层(工作流引擎、自愈Agent)和展示交互层(API、控制台)。通过Python代码自动生成模块依赖关系图,并提供了面试讲解技巧。全文旨在帮助开发者在面试中系统性地展示项目架构设计能力。

qq_2937655951的博客 93

Arduino IDE 开发ESP32-S3编译报错 Sketch too big?一步步解决!

解决方法很简单,只需要一步步来修改 Arduino IDE 的配置即可。确保你已经打开 Arduino IDE 并加载了你的 ESP32 代码。如果你也遇到了这个问题,按这个方法试试,应该就能顺利搞定!,如果你需要 OTA,就不能选这个方案,需要换成。,但我回头一想,我这块 ESP32-S3 可是。,按理说存储空间应该足够啊,那这到底是咋回事?,默认方案就装不下了,这时就需要选择更大的。按钮,这次应该不会报错了!,然后在下拉菜单中找到。,可以支持更大的固件。如果你的固件体积超过。,就能正常编译上传。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2136

centos7 安装seata + springboot配置

实际上只是部署一个单例的Seata,但是仍然按照集群的方式去配置。Seata的高可用依赖于注册中心、配置中心和数据库来实现;因此我们需要修改相关的配置。下面我们以nacos(注册中心和配置中心)和MySQL为例子,Seata-Server使用注册中心进行集群间的通信,同时将事务数据保存到数据库中让整个集群统一使用事务信息。 关于nacos安装,请参考:centos7 部署nacos_wdquan19851029的专栏-优快云博客 1.安装mysql数据库 本文使用yum安装 首先添加mysql 的

wdquan19851029的专栏 5340

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java zip压缩/解压工具类 ZipUtil

if (flist.length == 0) {// 如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点。} else {// 如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩。} else {// 如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中。// 取出文件夹中的文件(或子文件夹)// 将源文件写入到zip文件中。

shengguimin的博客 1149

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java创建zip压缩文件

一.java压缩文件夹demo 这里给的demo是压缩整个文件夹,如果需要压缩单个文件需要你自己更改一下. import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * @ClassName File2Zip * @Auther LangGuofeng * @D...

老狼的博客 4437

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Android开发】如何打包压缩文件、文件夹?

在开发Android应用过程中,基本都会遇到需要压缩文件的需求,比如打包日志文件上传等功能,今天就来看看如何开发一个通用的工具类用于压缩文件或文件夹。这样我们就可以打包压缩文件或文件夹了,为了方便可以封装成一个工具类,方便以后使用。我自己整理了一个工具类,大家有需要可以关注微信公众号“BennuCTech”,发送“ZipFile”获取完整代码。

公众号:BennuCTech 1443

java压缩文件方法

总结一下实现压缩文件的几个步骤: 1.创建压缩文件的对象(一旦创建对象,就会创建对应名称的压缩文件) 2.创建文件入口(这里传入的参数是压缩文件中的路径,可随意) 3.通过putNextEntry方法移动到入口上 4.进行你所需要的操作 5.关流 前三步是必须的,当然最后关流也是必须的 package com.baishiwei.myFileDemo; import java.io.File; ...

bsw451926392的博客 1157

java 压缩文件 文件夹

java 压缩文件、文件夹 功能部分使用java 原生api ,第三方依赖 ant 是为解决中文乱码 maven依赖 <!-- 解决 Zip 中文乱码 --> <dependency> <groupId>ant</groupId> <artifactId>ant</...

qq_35425070的博客 247

java 压缩文件的方法_java压缩文件方法

总结一下实现压缩文件的几个步骤:1.创建压缩文件的对象(一旦创建对象,就会创建对应名称的压缩文件)2.创建文件入口(这里传入的参数是压缩文件中的路径,可随意)3.通过putNextEntry方法移动到入口上4.进行你所需要的操作5.关流前三步是必须的,当然最后关流也是必须的package com.baishiwei.myFileDemo;import java.io.File;import jav...

weixin_39681161的博客 314

java解压包含多个文件夹的压缩包

Java解压包含多个文件夹的压缩包 在日常开发中,我们经常会遇到需要解压包含多个文件夹的压缩包的情况。在Java中,我们可以通过使用Java标准库中的java.util.zip包来实现解压操作。本文将介绍如何使用Java来解压包含多个文件夹的压缩包,并提供代码示例。 解压步骤 解压包含多个文件夹的压缩包可以分为以下几个步骤...

weixin_40441635的博客 346

Java压缩文件和文件夹为zip格式

【代码】Java压缩文件和文件夹为zip格式。

西凉的悲伤博客 3401

java提供的压缩方法压缩文件夹(可以包含多个子文件夹)

直接复制过来用就行 public class EEETest { public static void main(String[] args) throws FileNotFoundException { String basePath = ""; String directoryName = "D:/DLL/d067f03f-840a-4462-9d67-045ff3960806/40"; ZipOutputStream zos = new Zi

京北游戏官方 2万+

Java压缩一个文件夹的方法

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * @ClassName: Compress.

寒夜二十五 1919

zipfile java_Java ZIP压缩文件使用总结

做Java Web开发,有时候遇到将多个文件或者文件夹压缩成一个.zip文件,供前端下载。Java的JDK中提供一个java.util.zip的接口,供大家使用。如下图:图上就是Java 的JDK提供的接口,但是压缩文件或者文件夹的时候,怎么使用上面的接口呢?下面我给出几个相关的接口,这些接口是下面压缩文件或者文件夹过程中使用到的。java.util.zip.ZipEntry;java.util....

weixin_42401137的博客 2417

java 生成zip如法打开_Java创建ZIP压缩文件的方法

本文实例讲述了Java创建ZIP压缩文件的方法。分享给大家供大家参考。具体如下:这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题。/*** 压缩文件夹* @param sourceDIR 文件夹名称(包含路径)* @param targetZipFile 生成zip文件名* @author liuxiangwei*/public static v...

weixin_28944305的博客 181

Java压缩文件/文件夹

ZipOutputStream流、递归压缩。 在关闭ZipOutputStream流之前,需要先调用flush()方法,强制将缓冲区所有的数据输出,以避免解压文件时出现压缩文件已损坏的现象。 /** * @param source 待压缩文件/文件夹路径 * @param destination 压缩后压缩文件路径 * @return */ public static boolean toZip(String source, String destination) {...

weixin_37672801的博客 4600

java 压缩指定文件_Java将指定文件/文件夹压缩成zip、rar压缩文件

import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;import java.io.*;import java.util.zip.CheckedOutputStream;import java.util.zip.CRC32;/*** @author chenssy** 将指定文件/文件夹压缩...

weixin_36215364的博客 1670
上一篇: Oracle dblink详解
肉鸡控
博客等级 码龄15年 2粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值