当前位置: 首页 > news >正文

【JAVA入门】Day45 - 压缩流 / 解压缩流

【JAVA入门】Day45 - 压缩流 / 解压缩流


文章目录

  • 【JAVA入门】Day45 - 压缩流 / 解压缩流
    • 一、解压缩流
    • 二、压缩流


        在文件传输过程中,文件体积比较大,传输较慢,因此我们发明了一种方法,把文件里的数据压缩到一种压缩文件中,将体积减小,传输完毕后,再用解压缩方法把数据解压出来。这就是压缩流和解压缩流的诞生初衷。
        解压缩流和压缩流在体系中的位置如下,它们是字节输入输出流的高级包装类。
在这里插入图片描述

一、解压缩流

        解压的本质是把压缩包中的每一个 ZipEntry 对象(压缩包中的每一个文件都是一个 ZipEntry 对象)按照层级拷贝到本地的另一个文件夹中。
        解压缩流是把文件中的内容读入 JVM,因此它属于输入流。
        下面的代码演示了如何将一个本地 zip 文件解压。

package ZipStream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class ZipStreamDemo1 {public static void main(String[] args) throws IOException {/*解压缩流D:\IdeaProjects\HelloWord\src\ZipStream\ZipFile.zip*///1.创建一个File表示要解压的压缩包File src = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream\\ZipFile.zip");//2.创建一个File表示解压的目的地File dest = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream");unzip(src,dest);}//定义一个方法用来解压public static void unzip(File src, File dest) throws IOException {//解压的本质:把压缩包中的每一个文件或者文件夹读取出来//按照层级拷贝到目的地当中//创建一个解压缩流用来读取压缩包中的数据ZipInputStream zip = new ZipInputStream(new FileInputStream(src));//先获取到压缩包中的每一个 zipEntry 对象ZipEntry entry;while ((entry = zip.getNextEntry()) != null) {System.out.println(entry);//遍历到了文件夹:在目的地处创建一个同名文件夹//文件:把它存放到目的地的dest文件夹中if (entry.isDirectory()) {//文件夹:在dest处创建一个同名文件夹File file = new File(dest, entry.toString());file.mkdirs();} else {//文件:读取文件中的数据,存放到目的地destFileOutputStream fos = new FileOutputStream(entry.toString());int b;while ((b = zip.read()) != -1) {//写到目的地fos.write(b);}fos.close();//表示在压缩包中的一个文件处理完毕了zip.closeEntry();}}zip.close();}
}

二、压缩流

        压缩的本质其实就是把每一个(文件/文件夹)看成 ZipEntry 对象放到压缩包中。
        利用压缩流压缩一个文件的代码如下所示:

package ZipStream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipStreamDemo2 {public static void main(String[] args) throws IOException {/*压缩流把a.txt打包成一个压缩包*///1.创建File对象表示要压缩的文件File src = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream\\a.txt");//2.创建File对象表示压缩包的位置File dest = new File("D:\\IdeaProjects\\HelloWord\\src\\ZipStream");//3.调用方法来压缩toZip(src,dest);}public static void toZip(File src, File dest) throws IOException {//1.创建压缩流关联压缩包ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest,"a.txt")));//2.把要压缩的文件看成一个个的Entry对象,表示压缩包里的每一个文件和文件夹ZipEntry entry = new ZipEntry("a.txt");//3.把ZipEntry对象放到压缩包当中zos.putNextEntry(entry);//4.把src文件中的数据写到压缩包当中FileInputStream fis = new FileInputStream(src);int b;while((b = fis.read()) != -1){zos.write(b);}zos.closeEntry();zos.close();}
}
http://www.lryc.cn/news/438251.html

相关文章:

  • Qt_自定义信号
  • 【运维方案】某系统运维需求方案参考(doc全原件2024)
  • Linux环境使用Git同步教程
  • c++临时对象导致的生命周期问题
  • CSP-J 算法基础 深度优先搜索
  • LeetCode题练习与总结:基本计算器 Ⅱ--227
  • Elasticsearch基础(七):Logstash如何开启死信队列
  • c语言--力扣简单题目(链表的中间节点)讲解
  • 【STM32 Blue Pill编程】-定时器计数模式
  • 【例题】lanqiao1331 二进制中 1 的个数
  • 【论文解读】图像序列识别:CRNN技术在场景文本识别中的应用与突破(附论文地址)
  • Vue3+CesiumJS相机定位camera
  • turbo译码算法MAX, MAX_SCALE and MAX_STAR的比较
  • 关于HarmonyOS的学习
  • 【雅特力AT32】搭建模板工程及GPIO点灯操作
  • 实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试
  • 数据库索引底层数据结构之B+树MySQL中的页索引分类【纯理论干货,面试必备】
  • 编译QT源码时的configure参数须知
  • 如何利用人工智能大模型来进行数字化营销?
  • 【MRI基础】回波序列长度-echo train length ETL概念
  • (179)时序收敛--->(29)时序收敛二九
  • [Visual Stuidio 2022使用技巧]2.配置及常用快捷键
  • 每日奇难怪题(持续更新)
  • 江协科技STM32学习- P13 TIM定时器中断
  • git github仓库管理
  • 【JavaEE】线程安全性问题,线程不安全是怎么产生的,该如何应对
  • 低代码-赋能新能源汽车产业加速前行
  • 基于UDP的简易网络通信程序
  • AI大模型在知识管理平台上的应用:泛微·采知连实现自动采集.精准搜索.智能问答.主动推荐
  • JavaEE:文件内容操作(一)