压缩文件的解析方式
一、解压缩zip格式
步骤:
1.根据压缩文件原始路径(字符串),创建源文件对象(File对象)
2.创建根目录对象,传入源文件的根目录
3.判断根目录,是否已经存在
①如果存在,则删除;
②如果不存在,则创建根目录。
4.可以用ZipInputStream对象,进行zip格式的压缩文件
首先创建一个ZipInputStream对象,zip文件中的每一个子文件或者子目录都是一个ZipEntry类型的对象。通过ZipInputStream对象调用getNextEntry()方法获取这些文件到输入流中。然后通过输入流和输出流完成文件的读写。
5.遍历压缩包中的每个子目录或子文件(ZipEntry类型的对象)
6.创建子目录或子文件(File对象)
7.创建子目录或者子文件
①如果zipEntry对象是目录的话,那就创建子目录
②如果zipEntry对象是文件的话,那就创建子文件
8.读取当前压缩包的子文件,并通过输出流out写入新子文件中
具体代码实现如下:
public class Text02 {public static void main(String[] args) {String path = "D:\\001\\easyftp-server-1.7.0.10-cn.zip";if (path.endsWith(".zip")) {unzip(path);} else if (path.endsWith(".rar")) {unrar(path);}}// 解压缩zip格式public static void unzip(String path) {// 根据原始路径(字符串),创建源文件(File对象)File sourceFile = new File(path);// 创建根目录对象String sourceFileName = sourceFile.getName();//压缩包的名字File rootDir = new File(sourceFile.getParent() + "\\" + sourceFileName.substring(0, sourceFileName.lastIndexOf(".")));//传入源文件的根目录// 判断根目录,是否已经存在if (rootDir.exists()) {// 如果存在,则删除
// rootDir.delete();//仅能删除空目录// 使用commns-io包提供的FileUtils工具类进行删除try {FileUtils.deleteDirectory(rootDir);} catch (IOException e) {e.printStackTrace();}}// 创建根目录rootDir.mkdir();// ZipInputStream:用于进行zip格式的压缩文件输入流try (ZipInputStream in = new ZipInputStream(new FileInputStream(sourceFile));) {// 遍历压缩包中的每个子目录或子文件(ZipEntry类型的对象)ZipEntry zipEntry = null;while ((zipEntry = in.getNextEntry()) != null) {
// System.out.println(zipEntry.getName());\// 创建子目录或子文件(File对象)File file = new File(rootDir.getPath() + "\\" + zipEntry.getName());if (zipEntry.isDirectory()) {// 物理磁盘创建子目录file.mkdir();} else {// 物理磁盘创建子文件file.createNewFile();//读取当前压缩包的子文件,并通过输出流out写入新子文件中FileOutputStream out = new FileOutputStream(file);byte[] buff = new byte[1024];int len = -1;while((len=in.read(buff))!=-1) {out.write(buff,0,len);}out.close();}}} catch (IOException e1) {e1.printStackTrace();}}
}
二、解压缩rar格式
步骤:
1.创建源文件对象
2.创建解压缩的根目录对象,
通常是与zip文件在同一目录下,通过用zip的文件的父目录与zip文件的文件名作为数据源,并调用mkdir()方法创建目录。
①如果根目录存在的话,就删掉
②如果根目录不存在,就创建根目录
3.创建Archive对象,用于读取rar压缩文件格式
解析并读取zip压缩文件,创建一个ZipInputStream,传入一个FileInputStream作为数据源,然后循环调用getNextEntry(),遍历zip文件的每一个子文件和子目录,每次循环获取子文件名或子目录名,并创建文件的输出流,调用write()方法,读取文件内容并写入输出流。
4.获取压缩文件中的所有子目录或子文件(FileHeader对象)
5.按照子目录(子文件)名称排序
6.遍历子目录和子文件
7.创建子目录或者子文件
①遍历结果是目录,那就创建新子目录
②遍历结果是文件,那就创建子文件
8.获取压缩包中的自我年间输入流,复制文件输入流至新子文件
具体代码实现如下:
public class Text02 {public static void main(String[] args) {
// String path = "D:\\001\\easyftp-server-1.7.0.10-cn.zip";String path = "D:\\001\\实验案例.rar";if (path.endsWith(".zip")) {unzip(path);} else if (path.endsWith(".rar")) {unrar(path);}}//解压缩rar格式public static void unrar(String path) {//1.创建解压缩的根目录//1.创建源文件对象File rarFile = new File(path);//2.创建解压缩的根目录对象File rootDir = new File(rarFile.getParent()+"\\"+rarFile.getName().substring(0, rarFile.getName().indexOf(".")));//3如果根目录存在的话,就删掉if(rootDir.exists()) {try {FileUtils.deleteDirectory(rootDir);} catch (IOException e) {e.printStackTrace();}}//3.创建根目录rootDir.mkdir();//创建Archive对象,用于读取rar压缩文件格式try (Archive archive = new Archive(new FileInputStream(path))) {//获取压缩文件中的所有子目录或子文件(FileHeader对象)List<FileHeader> fileheaderList = archive.getFileHeaders();//按照子目录(子文件)名称排序!fileheaderList.sort(new Comparator<FileHeader>() {
//!@Overridepublic int compare(FileHeader o1, FileHeader o2) {return o1.getFileName().compareTo(o2.getFileName());}});//遍历子目录和子文件for(FileHeader fd: fileheaderList) {File f = new File(rootDir.getPath()+"\\"+fd.getFileName());if(fd.isDirectory()) {//创建新子目录f.mkdir();}else {//创建新子目录f.createNewFile();//获取压缩包中的子文件输入流InputStream in = archive.getInputStream(fd);//复制文件输入流至新子文件FileUtils.copyInputStreamToFile(in, f);}}} catch (RarException | IOException e) {e.printStackTrace();}}
}
三、压缩文件
步骤:
1.首先创建File对象files引用原始目录
2.然后创建一个ZipOutputStream,传入一个FileOutputStream作为数据源
3.调用listFiles()方法,获取并遍历原始目录下的子文件列表,每次循环创建一个ZipEntry,每写入一个文件前,调用putNextEntry()方法
4.然后将源文件的字节内容,写入zip压缩包
需要注意,每次写完文件,必须调用closeEntry()结束当前ZipEntry。
//压缩文件
public class Text05 {public static void main(String[] args) {//所在目录File dir = new File("D:\\001\\001");//获取所有原始子文件File[] files = dir.listFiles();//创建zip压缩文件的输出流try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(dir.getPath()+"\\"+dir.getName()+".zip"))) {//遍历所有原始子文件for(File f:files) {//写入一个压缩包中的子文件(ZipEntry对象)out.putNextEntry(new ZipEntry(f.getName()));//写入字节内容out.write(Files.readAllBytes(f.toPath()));//关闭压缩包的子文件out.closeEntry();}} catch (IOException e) {e.printStackTrace();}}}
相关文章:
压缩文件的解析方式
一、解压缩zip格式 步骤: 1.根据压缩文件原始路径(字符串),创建源文件对象(File对象) 2.创建根目录对象,传入源文件的根目录 3.判断根目录,是否已经存在 ①如果存在,则删除; ②如果不存在,则创建根目录。 4.可以用Zip…...
rocket mq保证消息幂等性
在互联网应用中,尤其在网络不稳定的情况下,消息队列 RocketMO 的消息有可能会出现重复,这个重复简单可以概括为以下情况: 1、发送时消息重复 当一条消息已被成功发送到服务端并完成持久化,此时出现了网络闪断或者客户端宕机&…...
Elasticsearch基本操作
文章目录 1.1 索引库操作1.1.1 创建索引库 :1.1.2 删除索引库 :1.1.3 判断索引库是否存在 1.2 文档操作1.2.1 新增文档1.2.2 查询文档1.2.3 删除文档1.2.4 修改文档1.2.5 批量导入文档 1.3 RestClient查询1.3.1 普通查询1.3.2 复合条件查询1.3.3 分页排序查询1.3.4 高亮分页查询…...
设计模式探索:责任链模式
1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求&…...
OceanBase 配置项系统变量实现及应用详解(3):新增配置项的方法
本专题的第一篇文章,配置项的定义及使用方法,详细阐述了配置项的基础用法。对于那些对源码抱有浓厚兴趣的同学来说,或许还希望深入了解配置项的实现原理,甚至渴望亲自添加新的配置项,以满足个性化的功能需求。 本文通…...
PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0
符合条件的 PCI SSC 利益相关者在 30 天的意见征询 (RFC) 期间审查 PCI PTS 硬件安全模块 (HSM) 模块化安全要求 v5.0 草案并提供反馈。 PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0图 从 7 月 8 日到 8 月 8 日,邀请符合条件的 PCI SSC 利益相关者在 30 天的意见…...
javaweb中的请求与响应--基于postman工具的应用(附带postman的详细安装步骤)
一、前言 后端的第一天感觉难度就上来了,可能是基础太过薄弱了吧。目前看视频已经有点跟不上了,果然15天想要拿下还是太勉强了点。30天还差不多。不知道读者们有没有好好的去学这方面的知识,没有什么是学不会的,关键是坚持。 Po…...
StarRocks下载使用说明和基础操作
简介 StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数…...
桥接模式案例
桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。桥接模式通过创 建一个桥接接口,将抽象部分和实现部分连接起来,从而实现两者的解耦。下面是一个详细的桥接…...
Spring源码二十二:Bean实例化流程五
上一篇Spring源码二十一:Bean实例化流程四,咱们主要分析里createBeanInstance方法Spring给我们提供给的FactoryMethod方法,举例说明了factoryMethod属性如何使用,同时简单讨论了具体实现逻辑。 这一篇咱们将进入反射实例化Bean&am…...
Unity3D中UI层级改变详解
在Unity3D开发中,UI层级的调整是常见的需求,它直接关系到用户界面(UI)元素的显示顺序。在Unity的UI系统中,主要使用UGUI(Unitys Graphical User Interface)来实现界面布局和元素展示。本文将详细讲解Unity3D中如何改变…...
centos安装数据库同步工具sqoop并导入数据,导出数据,添加定时任务
目录 1.安装jdk 1.1上传jdk安装包到/opt目录下并解压 1.2解压 1.3配置环境变量 2.安装hadoop 2.1.下载hadoop 2.2.解压hadoop 2.3配置环境变量 3.安装sqoop 3.1下载 3.2解压 3.3下载依赖包并复制到指定位置 3.3.1下载commons-lang-2.6-bin.tar.gz 3.3.2将mysql-c…...
asp .net core 避免请求body数据量过大
方法1, 全局避免 引入包 dotnet add package Microsoft.AspNetCore.Http.Features using Microsoft.AspNetCore.Http.Features;public void ConfigureServices(IServiceCollection services) {services.Configure<FormOptions>(options >{// 设置允许的最…...
搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器
搭建discuz论坛(lvsnginxhttpmysqlnfs) 一、IP规划 服务名IP地址服务LVS1192.168.100.110keepalivedipvsadmLVS2192.168.100.111keepalivedipvsadmnginx1192.168.100.113nginxnginx2192.168.100.114nginxnfs192.168.100.116nfs-utilweb1192.168.100.11…...
就业平台小程序的设计
管理员账户功能包括:系统首页,个人中心,学生管理,企业管理,企业类型管理,留言板管理,系统管理 微信端账号功能包括:系统首页,招聘信息,简历,我的 …...
hid-ft260驱动学习笔记 5 - ft260_i2c_probe
目录 1. 保存ft260_device到私有数据 2. 初始化I2C设备分配属性 3. 添加I2C适配器 4. 初始化GPIO 5. ft260_i2c_algo 5.1 ft260_functionality 5.2 ft260_i2c_xfer 5.3 ft260_smbus_xfer 6. ft260_i2c_quirks 这个函数是i2c的接口probe函数。 1. 保存ft260_device到私…...
Android上如何使用perfetto分析systrace
Android上如何使用perfetto分析systrace Perfetto 是一个用于性能分析的工具,提供了对 Android 系统内部工作情况的详细视图。它可以用来替代传统的 systrace 工具,提供更加全面的性能分析功能。以下是如何使用 Perfetto 分析 Systrace 数据的详细指南&…...
React Hooks学习笔记
一、usestate的使用方法-初始化state函数 import React, { useState } from "react"; function App() {const [count, setCount] useState(0);return (<div><p>点击{count}次</p><button onClick{() > setCount(count 1)}>点击</bu…...
BGP第二日
上图为今日所用拓扑 ,其中R1和R4,R3和R5为EBGP邻居,R1和R3为IBGP邻居,AS200区域做OSPF动态路由 一.BGP建立邻居的六种状态 1.idle 空闲状态:建立邻居最初的状态 2.Connect 连接状态:在…...
rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态
问题描述: 因业务需要使用的rabbitmq是3.7.8版本的,rabbitmq在3.3.0之后就允许使用guest账号的权限了,所以需要创建一个administrator标签的用户。 如下操作创建的用户: 创建完成之后就提示如下的报错: 注:…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
