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

JAVA开发 选择指定的文件生成ZIP压缩包

JAVA开发 选择指定的文件生成ZIP压缩包

    • 1、ZipOutputStream
      • 1.1 主要方法
      • 1.2 使用步骤
    • 2、案例实现
      • 2.1 代码块
      • 2.2 运行界面

1、ZipOutputStream

ZipOutputStream 是 Java 中的一个类,它属于 java.util.zip 包,用于将多个文件或数据流写入到一个 ZIP 输出流中,从而创建 ZIP 文件。ZIP 文件是一种常用的压缩文件格式,可以包含多个文件和目录,并且这些文件和目录在 ZIP 文件中被压缩以节省存储空间。

1.1 主要方法

项目Value
putNextEntry(ZipEntry e)此方法用于开始写入新的 ZIP 文件条目,并将流定位到条目数据的开始位置。ZipEntry 对象表示 ZIP 文件中的一个条目,可以包含条目的名字、大小、时间戳等信息。
write(byte[] b, int off, int len)此方法从字节数组 b 中的 off 位置开始,将 len 长度的字节写入当前 ZIP 条目。
closeEntry()此方法用于关闭当前 ZIP 条目,并将流定位到下一个条目的开始位置。在写入完一个条目的数据后,应调用此方法以表示该条目已完成。
finish()完成 ZIP 输出流的写入,但不关闭底层的 OutputStream。在调用 finish() 之后,可以继续向底层的 OutputStream 写入数据,但不能再向 ZipOutputStream 写入新的条目。
close()关闭 ZIP 输出流,并释放与之相关联的资源。在调用 close() 之后,不能再向流中写入数据。通常,在 close() 被调用时,会自动调用 finish()。

1.2 使用步骤

要使用 ZipOutputStream 类来创建 ZIP 文件并添加条目(文件或数据),你需要遵循以下步骤:

  1. 创建一个 FileOutputStream 对象:这个对象将用于将 ZIP 数据写入到文件中。
  2. 使用 FileOutputStream 创建一个 ZipOutputStream 对象:ZipOutputStream 封装了 FileOutputStream,并提供了写入 ZIP 格式数据的方法。
  3. 为 ZIP 文件中的每个条目创建 ZipEntry 对象:每个 ZipEntry 对象代表 ZIP 文件中的一个文件或目录。
  4. 调用 putNextEntry(ZipEntry e) 方法:在写入文件内容之前,调用此方法以告诉 ZipOutputStream 你将要写入一个新的条目。
  5. 写入文件内容:使用 ZipOutputStream 的 write() 方法将文件内容写入 ZIP 文件中。
  6. 调用 closeEntry() 方法:在完成一个条目的内容写入后,调用此方法以关闭当前条目。
  7. 关闭 ZipOutputStream 和 FileOutputStream:完成所有条目的写入后,关闭这两个流以释放资源。

2、案例实现

案例简述:通过启动java代码来打开文件选择器对话框,用户选择确认需要进行压缩的文件,选择完毕后点击按钮确认,指定位置自动生成包含该文件的压缩包。

2.1 代码块

import javax.imageio.stream.FileImageInputStream;
import javax.swing.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;public class FileZipper {private static final String FILEPATH  = "D:\\OA_Temp\\attachments\\rar_attachs\\";//生成文件名public static String CreateFileName(String suffix){String fileName;Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");fileName = FILEPATH + sdf.format(date) +" temp."  + suffix;return fileName;}//压缩单文件public static void FileZipperByAFile(){String filename = GenerateCompress.GenerateFileName("","");JFileChooser fileChooser = new JFileChooser("D:\\OA_Temp\\attachments\\");  //设置文件选择器对话框默认的路径fileChooser.setMultiSelectionEnabled(false);int value = fileChooser.showOpenDialog(null);if(value != JFileChooser.APPROVE_OPTION){return ;}File outputZip = new File(CreateFileName("zip")); // 指定输出的ZIP文件File file = fileChooser.getSelectedFile();try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(outputZip))) {// 创建一个ZipEntry,设置压缩后文件的名称ZipEntry zipEntry = new ZipEntry(file.getName());zos.putNextEntry(zipEntry);// 使用FileInputStream读取源文件try (FileInputStream fis = new FileInputStream(file)) {byte[] bytes = new byte[1024];int length;// 读取源文件内容并写入到ZipOutputStreamwhile ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}}// 关闭ZipEntryzos.closeEntry();} catch (IOException e) {e.printStackTrace();}System.out.println("File compressed successfully!");}public static void main(String[] args) {FileZipperByAFile();}
}

2.2 运行界面

  1. 文件选择器对话框打开默认路径:
    在这里插入图片描述
  2. 执行结果
    在这里插入图片描述
  3. 生成压缩包
    在这里插入图片描述

相关文章:

  • 媒体查询的屏幕尺寸范围
  • 中文版svn怎么忽略文件
  • MFC工控项目实例之三theApp变量传递对话框参数
  • Java 异常处理 -- Java 语言的异常、异常链与断言
  • react修改本地运行项目的端口
  • 重装系统,以及设置 深度 学习环境
  • Kubernetes(K8s)从入门到精通系列之十九:Operator模式
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)
  • 软件方案评审与模块优化:从FOC模块出发的电控平台建设
  • 【PX4-AutoPilot教程-TIPS】离线安装Flight Review PX4日志分析工具
  • 从零制作一个docker的镜像
  • react有什么特点
  • 渗透测试nginx增加400,500报错页面
  • 网页自动关闭
  • 【FreeRTOS】ARM架构汇编实例
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 「译」Node.js Streams 基础
  • AHK 中 = 和 == 等比较运算符的用法
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CentOS6 编译安装 redis-3.2.3
  • Cumulo 的 ClojureScript 模块已经成型
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Joomla 2.x, 3.x useful code cheatsheet
  • PHP CLI应用的调试原理
  • vuex 笔记整理
  • 对象引论
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于字符编码你应该知道的事情
  • 规范化安全开发 KOA 手脚架
  • 基于axios的vue插件,让http请求更简单
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 设计模式 开闭原则
  • 通过npm或yarn自动生成vue组件
  • 微信小程序设置上一页数据
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​queue --- 一个同步的队列类​
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (floyd+补集) poj 3275
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)计算机毕业设计大学生兼职系统
  • (一一四)第九章编程练习
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)memcache、redis缓存
  • (转)visual stdio 书签功能介绍
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)详解PHP处理密码的几种方式
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • /usr/bin/env: node: No such file or directory
  • :=
  • @Bean有哪些属性
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现