ZIP压缩输出流(将ZIP文件解压)

文章目录

  • 前言
  • 一、ZIP压缩输出流是什么?
  • 二、使用介绍
    • 1.使用方法
    • 2.实操展示
  • 总结

前言

        该篇文章相对应的介绍如何使用java代码将各种文件(文件夹)从ZIP压缩文件中取出到指定的文件夹中。解压流将ZIP文件中的文件以条目的形式逐一读取,数据写入对应创建的文件夹中。


一、ZIP压缩输出流是什么?

        Zip压缩输出流是指将数据从Zip文件中解压到指定文件的输出流。ZipInoutStream类可读取ZIP压缩格式的文件,包括已压缩和未压缩的条目(entry)。

二、使用介绍

1.使用方法

(1)构造方式:

new ZipInputStream(InputStream in);
//该构造方式参数 in 为输出流对象 

 (2)常用方法:

ZipInputStream类的常用方法
方法功能描述
read(byte[] b,int off,int len)读取字节数组b内off偏移量的位置,长度是len字节
available()判断是否已读完目前entry所指定的数据。已读完返回0,否则返回1
closeEntry()关闭当前ZIP条目并定位流以读取下一个条目
skip(long n)跳过当前ZIP条目中的指定字节数
getNextEntry()读取下一个ZipEntry,并将流内的位置移至该entry所指数据的开头
createZipEntry(String name)以指定的name参数新建一个ZipEntry对象

解压流程图

 

2.实操展示

代码如下(示例):

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class DeZip1 {public static void unzipFile(File zipFile, String destDirectory) {byte[] buffer = new byte[1024]; //创建缓存区try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {ZipEntry zipEntry = zis.getNextEntry(); //开启Zip条目while (zipEntry != null) {  //循环读取全部压缩文件String fileName = zipEntry.getName();   //获取压缩文件名称//创建解压文件   File newFile = new File(destDirectory + File.separator + fileName); if (zipEntry.isDirectory()) {   //若条目为文件夹,创建完整的文件夹目录newFile.mkdirs();} else {    //若条目为文件//创建解压文件的父目录,确保解压文件目录结构正常new File(newFile.getParent()).mkdirs();//创建文件输入流 try (FileOutputStream fos = new FileOutputStream(newFile)) {    int len;//解压流将数据从压缩包读取,输入流将数据写入解压文件中while ((len = zis.read(buffer)) > 0) {  fos.write(buffer, 0, len);fos.flush();}}}zipEntry = zis.getNextEntry();}zis.closeEntry();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {File zipFile = new File("D:/word.zip");String destDirectory = "D:/word";unzipFile(zipFile, destDirectory);}
}

运行结果:

 压缩包中的文件

运行后文件被解压到了指定文件

mkdirs()方法如何获取到文件的路径?

         mkdirs() 方法是 Java 中的一个文件夹创建方法,用于创建一个文件夹以及它的所有父文件夹。该方法会返回一个 boolean 类型的值,表示文件夹是否创建成功。

        mkdirs() 方法获取文件夹路径的方式主要通过传入参数来实现。你可以在方法中传入一个字符串类型的参数,该参数表示文件夹的路径。例如:

File dir = new File("C:\\Users\\username\\Documents\\myFolder");
dir.mkdirs();

        在上述代码中,我们首先创建了一个 File 对象,然后传入一个字符串类型的参数 “C:\Users\username\Documents\myFolder”,表示要创建的文件夹路径。然后调用 mkdirs() 方法创建该文件夹及其父文件夹。

mkdirs()方法具体是如何获取创建多层目录的?

         mkdirs()方法是Java中File类提供的一个方法,用于创建多级目录。

        该方法的实现原理是:在创建指定路径的目录时,如果该目录的上级目录不存在,则会先创建上级目录,再创建指定目录。

具体的实现过程可以简单描述为以下几步:

        1.将传入的路径分割成各级目录名(使用File.separatorChar分割);
        2.从最上级目录开始逐层判断是否存在,如果不存在则创建该目录;
        3.重复步骤2,直到所有目录都创建完成。
例如,假设要创建路径为"/a/b/c/d"的目录,而其中的上级目录"a"、“a/b”、"a/b/c"都不存在,则mkdirs方法会按照以下步骤进行创建:

分割路径,得到目录名数组:[“”, “a”, “b”, “c”, “d”]
判断目录""是否存在,不存在则创建
判断目录"a"是否存在,不存在则创建
判断目录"a/b"是否存在,不存在则创建
判断目录"a/b/c"是否存在,不存在则创建
判断目录"a/b/c/d"是否存在,不存在则创建
这样就完成了整个路径的创建。


总结

        以上就是使用ZipinputStream类解压ZIP文件的介绍,本文仅简单介绍了ZipInputStream流的使用,而ZipInputStream流更多的实战经验仍然需要我们在项目和实践中获取。有拓展或指正的内容欢迎在评论区中留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP PP模块学习提炼第一部分

SAP是ERP的一款软件。 SAP的入门困难: 听不懂,看不懂缺乏知识体系缺乏行业经验 SAP入门引导: 导师引导实战演练 SAP基础介绍 1.什么是SAP? System, Application and Products in Data Processing 即数据处理的系统、应用和产品。 2.…

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库,由腾讯开源。 支持 SAX 和 DOM 风格的 API,并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

算法学习007-进制转换 c++递归算法实现 中小学算法思维学习 信奥算法解析

目录 C进制转换 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C进制转换 一、题目要求 1、编程实现 小明学c有一段时间了,今天他想做一个进制转换的小程序,将十进…

网络基础——路由

网络基础——路由 要想网络畅通,应让网络中的路由器知道如何转发数据包到各个网段。路由器根据路由表来转发数据包,而路由表是通过直连网络、静态路由以及动态路由来构建的。 route命令,底层是使用ioctl实现;ip命令,…

一键生成AI数字人短视频工具推荐!

数字人是什么?是利用人工智能技术实现与真人直播形象的1:1克隆,即克隆出一个数字化的你自己,包括你的形象、表情、动作和声音都会被克隆下来,让你能够拥有接近真人的表现力。 怎样使用数字人一天生成上百条短视频,无需…

大模型爱好者的福音,有了它个人电脑也可以运行大模型了

GPT4ALL是一款可以运行在个人电脑上的大模型系统,不需要GPU即可运行,目前支持mac,linux和windows系统。 什么是GPT4ALL? 不论学习任何东西,首先要明白它是个什么东西。 Open-source large language models that run …

2024年CSC公派联合培养博士项目申报即将开始~

一、选派计划 联合培养博士研究生面向全国各博士学位授予单位选拔。 联合培养博士研究生的留学期限、资助期限为6-24个月。留学期限应根据拟留学单位学制、外方录取通知(或正式邀请信)中列明的留学时间确定。个人申报的资助期限应不超过留学期限&#…

力扣每日一题105:从前序与中序序列构造二叉树

题目 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,1…

内容安全(IPS入侵检测)

入侵检测系统( IDS )---- 网络摄像头,侧重于风险管理,存在于滞后性,只能够进行风险发现,不能及时制止。而且早期的IDS误报率较高。优点则是可以多点进行部署,比较灵活,在网络中可以进…

临时邮箱API发送邮件的安全性?如何保障?

临时邮箱API发送邮件的步骤有哪些?设置邮箱API方法? 电子邮件作为一种重要的通信方式,而临时邮箱API作为一种新兴的邮件发送技术,其安全性更是成为大家关注的焦点。那么,临时邮箱API发送邮件的安全性究竟如何呢&#…

C语言内存函数memcpy与memmove

一.memcpy的使用和模拟实现 1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置…

[正则表达式]正则表达式语法与运用(Regular Expression, Regex)

0. 在线工具 RegExr: Learn, Build, & Test RegEx 1. 场景列举 vim Linux命令行 sublime 编辑器 java、python等语言中 ... ... 不同场景、不同版本语法可能不一样 2. 以下示例数据与基本语法 &2024 &As20242024# 2024sA#abdcefgha_bdcefghABASDSADAASDASD…

Java反序列化-CC11链

前言 这条链子的主要作用是为了可以在 Commons-Collections 3.2.1 版本中使用,而且还是无数组的方法。这条链子适用于 Shiro550漏洞 CC11链子流程 CC2 CC6的结合体 CC2 这是CC2的流程图,我们取的是后面那三个链子,但是由于CC2 只能在 c…

创建操作手册知识库的终极指南

在繁忙的工作中,有一个方便好用的操作手册知识库能帮我们节省大量时间,避免走弯路。那么,如何创建这样一个知识库呢?下面就给大家讲解一下简单易学的创建步骤。 一、明确目标与需求 在创建操作手册知识库之前,首先要明…

【Java 刷题记录】前缀和

前缀和 25. 一维前缀和 示例1: 输入: 3 2 1 2 4 1 2 2 3输出: 3 6import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(S…

纯血鸿蒙APP实战开发——手写绘制及保存图片

介绍 本示例使用drawing库的Pen和Path结合NodeContainer组件实现手写绘制功能。手写板上完成绘制后,通过调用image库的packToFile和packing接口将手写板的绘制内容保存为图片,并将图片文件保存在应用沙箱路径中。 效果图预览 使用说明 在虚线区域手写…

PyCharm怎么安装Comate与使用示范

目录 简单介绍Comate 安装步骤详解 Comate使用示范详解 使用总结 简单介绍Comate Baidu Comate智能编码助手是一款基于文心大模型打造的编码辅助工具,具备多重优势,包括代码智能、应用场景丰富、创造价值高、广泛应用等。它能帮助开发者提升编码效率…

如何迁移Windows PC数据到统信UOS 1070

原文链接:如何迁移Windows PC数据到统信UOS 1070 Hello,大家好啊!随着统信UOS 1070的推出,越来越多的用户和企业选择迁移到这个基于Linux的操作系统,以享受其安全性和稳定性的优势。今天,我们将探讨如何使用…

Java 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型,可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入(Dependency Injection)、面向切面编程(Aspect-Or…

Kansformer?变形金刚来自过去的新敌人

​1.前言 多层感知器(MLPs),也被称为全连接前馈神经网络,是当今深度学习模型的基础组成部分。 MLPs在机器学习中扮演着至关重要的角色,因为它们是用于近似非线性函数的默认模型,这得益于通用近似定理所保证的表达能力。然而,MLPs真的是我们能构建的最佳非线性回归器吗?尽管ML…