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

压缩流-ZipOutputStream的用法详解

ZipOutputStream类属于OutputStream间接类,它是一个用于输出流,可以将文件和目录压缩成ZIP格式的存档文件(将文件或目录写入ZIP文件)。

构造方法

在这里插入图片描述
该类提供两个构造方法区别在于是否允许用户自定义字符集(Charset),第一个构造方法默认将字符集固定为 StandardCharsets.UTF_8。

常用方法

1. public void putNextEntry(ZipEntry e);
开始写入新的 ZIP 文件条目并将流定位到条目数据的开头。ZipEntry就是一个条目(条目就是ZIP文件中的文件见下图案例)
2.public void closeEntry();
关闭当前 ZIP 条目并定位流以写入下一个条目
3.public void setLevel(int level) 
设置条目压缩级别
4.ZipOutputStream 间接继承了 OutputStream 所以实现了 OutputStream 的方法,write,finish等

简单使用

package com.zcf;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description: StudentEntity
 * @Author: 风清
 * @CreateTime: 2025-03-16 14:35
 */
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentEntity {
    @JSONField(name = "student_name",ordinal = 1)
    private String name;
    @JSONField(name = "student_age",ordinal = 2)
    private Integer age;
}
/**
 * @Description: FileTest 测试类
 * @Author: 风清
 * @CreateTime: 2025-03-13 19:53
 */
public class JsonFileTest {
    @Test
    public void test() {
    	//指定ZIP文件位置
        File file = new File("E:\\javatest\\StudentTest.zip");
        //构建压缩数据
        StudentEntity student1 = StudentEntity.builder().name("王二").age(18).build();
        StudentEntity student2 = StudentEntity.builder().name("张三").age(18).build();
        StudentEntity student3 = StudentEntity.builder().name("李四").age(18).build();
        ArrayList<StudentEntity> students = Lists.newArrayList(student1, student2, student3);
        /**创建ZIP压缩文件对象
        		在for循环外创建:这里解释一下为什么不在循环内创建
        		1.FileOutputStream 默认构造方法会导致每次创建FileOutputStream 对象时,覆盖掉原来内容
        		2.FileOutputStream(File,true)---zip文件是一种特定格式的文件,追加模式会导致zip格式损坏
        **/
        try (FileOutputStream fos = new FileOutputStream(file); ZipOutputStream zos = new ZipOutputStream(fos)) {
            for (StudentEntity student : students) {
                String zip = student.getName() + student.getAge() + ".json";
                zos.setLevel(1); //设置压缩等级
                zos.putNextEntry(new ZipEntry(zip)); //设置文件条目
                zos.write(JSON.toJSONString(student).getBytes()); //写入数据
                zos.closeEntry();//关闭条目,以写入下一条
                //注意这里不要习惯性finish,可以理解为zip包是一个文件,finish会导致zip写入结束
                //zos.finish();//习惯性刷
            }
        }catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

结果
在这里插入图片描述

相关文章:

  • mac系统之MySql图形化工具MySQLworkbench安装
  • 什么是网络协议
  • 【蓝桥杯每日一题】3.16
  • 软件架构设计、详细设计和开发编码的过程中提高性能的技巧和方法
  • 解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题
  • 印章/公章识别:PaddleX下的“Seal-Recognition”模型
  • 【从零开始学习计算机科学】算法分析(二)排序算法 与 分治法
  • Linux中安装maven
  • 【QA】建造者模式在Qt有哪些应用
  • Advanced Intelligent Systems 软体机器手助力截肢者玩转鼠标
  • 数据库的基本概念
  • STM32 —— MCU、MPU、ARM、FPGA、DSP
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固定表头表格
  • Compose 实践与探索十一 —— 其他 Modifier
  • Python中的uv run时,--with参数的作用
  • 【Rust基础】排序和分组
  • Starship:快速且高度可定制的命令行框架!!
  • 【BERT和GPT的区别】
  • 国产编辑器EverEdit - Hex Dump插件:看到文本的另一面!
  • leetcode0031 下一个排列-medium
  • 平凉建设局网站/服务器租用
  • 永安网站建设/seo网站推广助理招聘
  • 网站301做下/网站seo优化培训
  • asp网站制作实例教程/网络推广理实一体化软件
  • 网站做二级域名/搜索风云排行榜
  • 陕西富国建设工程有限公司网站/长沙百度推广运营公司