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 等外部库。它甚至…

DeepLabV1

deeplabv1 主要贡献和方法: DeepLab系统:提出了一个名为“DeepLab”的系统,该系统结合了深度卷积神经网络(DCNNs)和全连接条件随机场(CRFs),用于提高图像分割的精度。解决定位问题…

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

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

网络基础——路由

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

四川古力未来科技抖音小店:安全护航您的网购体验

在互联网购物日益普及的今天,四川古力未来科技抖音小店凭借其独特魅力和安全保障措施,成为越来越多消费者信赖的购物平台。本文将详细解读四川古力未来科技抖音小店的安全保障措施,让您在享受便捷购物的同时也能安心放心。 一、平台背景与安全…

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

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

CNN卷积神经网络,TensorFlow面试题

目录 CNN卷积神经网络 什么是TensorFlow? 张量是什么 TensorFlow有什么优势?

Django调用SECRET_KEY对数据进行加密

对数据进行加密 在Django中进行加密可以直接调用django配置文件中的SECRET_KEY , 同时还需要导入itsdangerous模块中的TimedJSONWebSignatureSerializer进行加密 1. 实现加密方法 , 生成用户加密链接 # 生成用户加密链接 def generate_verify_email_url(user):# 调研加密方法…

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

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接口将手写板的绘制内容保存为图片,并将图片文件保存在应用沙箱路径中。 效果图预览 使用说明 在虚线区域手写…