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. 生成压缩包
    在这里插入图片描述

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

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

相关文章

【mysql为什么采用b+树作为索引】

## 1、Hash: 它查询任何一行数据都只需一次IO,但是只能查一行,不能查询范围 。 ## 2、二叉树: 1、 可能会单边增长,退化成链表,查询效率和没建立索引差不多。2、才二叉而已,树的层数太多,IO次数多&#x…

贪心算法学习五

例题一 解法(贪⼼): 贪⼼策略: 我们的任何选择,应该让这个数尽可能快的变成 1 。 对于偶数:只能执⾏除 2 操作,没有什么分析的; 对于奇数: i. 当 n 1 的时候…

Docker 安装 MySQL5.7 和 MySQL8

文章目录 安装 MySQL5.7拉取镜像前期准备启动容器 安装MySQL8.0拉取镜像查看镜像前期准备启动容器 安装 MySQL5.7 拉取镜像 docker pull mysql:5.7拉下来镜像后 执行 docker images 此时我们已经有这个镜像了。 前期准备 在根目录下创建 app , 在 app 目录下创建…

小工具开发

因不太喜欢重复性工作,为了提高日常工作效率,在业余时间开发一些小工具用于帮助自己“偷懒”。 小工具功能: 1、Hightec编译的hex文件,与多模式标定hex文件合成 2、Bootloader文件,Hightec编译的hex文件,与…

Oracle 系列数据库使用 listagg去重,删除重复数据的几种方法

listagg聚合之后很多重复数据,下面是解决重复数据问题 案例表 create table "dept_tag_info" ( "tag_id" bigint not null, "tag_code" varchar(200), "tag_name" varchar(500), "tag_level" varchar(200), &…

Android Studio新增功能:Device Streaming

今天将Android Studio升级到2023.3.1 Patch2。发现新增了Device Streaming功能。支持远程使用Google的物理设备调试程序。这样可以方便地在真实设备上测试自己的APP。这对于手头没有Google设备的开发者而言,确实方便很多。该功能目前处于测试阶段,在2025…

交易中的群体行为特征和决策模型

本文基于人的行为和心理特征,归纳出交易中群体的行为决策模型,并基于这个模型,分析股价波浪运行背后的逻辑,以及投机情绪的周期变化规律,以此指导交易,分析潜在的风险和机会,寻找并等待高性价比…

system与excel族函数区别

1.system #include<stdlib.h> int system(const char *command); comand是命令的路径&#xff0c;一般我们用绝对路径 system函数会创建新的进程&#xff0c;新的进程执行完返回原来的进程&#xff0c;原来的进程则继续执行后面的代码段。 如我们创建一个sys.cpp文件…

使用pip2pi和nginx搭建私有pip镜像源方法

在内网环境下部署python开发环境&#xff0c;安装python第三方库比较麻烦&#xff0c;特别是安装需要多个依赖的库。一种比较好的解决方案是搭建一个本地的私有pip镜像源&#xff0c;有多个方案可以选择&#xff0c;比如pypiserver、pip2pi等&#xff0c;本文介绍使用python的p…

Python求子数组和的所有元素(附Demo)

目录 前言1. 暴力求解2. 前缀和哈希表3. 滑动窗口 前言 工作需要&#xff0c;对应需要优化查找子数组和等于特定值的算法 对应的算法推荐&#xff1a;子数组相关题目 以下算法主要针对Python 1. 暴力求解 双重循环时间复杂度为 O(n2) def subarrays_with_sum_equal_k(num…

HTML的常用标签

HTML&#xff08;补&#xff09; CSS选择器 元素选择器&#xff1a;指定一个标签给这个标签设置一个默认的样式。设置的样式对所有相同的标签都有用。 id选择器&#xff1a;我们可以给标签指定一个唯一的id&#xff0c;然后根据id可以在style标签中设置对应标签的样式元素。设…

【仿真建模-anylogic】FlowchartBlock原理解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-17 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 原理解析 2.1 核心函数 函数功能FlowchartBlock(Engine engine ,Agent owner, AgentList population )构造函数&#xff…

Day 24:100301. 构成整天的下标对数目II

Leetcode 100301. 构成整天的下标对数目II 给你一个整数数组 hours&#xff0c;表示以 **小时 **为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 **整天 **的下标对 i, j 的数目。 **整天 **定义为时间持续时间是 24 小时的 *…

助力樱桃智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

虾皮平台API:获取商品买家评论数据

一、接口核心功能 在电商领域&#xff0c;买家评论对于商品的销售和商家的口碑至关重要。虾皮作为东南亚地区知名的电商平台&#xff0c;为商家提供了丰富的商品买家评论数据。为了方便商家获取这些数据&#xff0c;我们的API接口服务其核心功能就是获取商品买家评论数据信息。…

docker和docker compose 部署

一. 将微服务运行在docker上&#xff1a; 1.新建一个空文件夹docker-demo&#xff0c;在里面再新建文件夹app&#xff0c;在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…

Python | Leetcode Python题解之第160题相交链表

题目&#xff1a; 题解&#xff1a; class Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:A, B headA, headBwhile A ! B:A A.next if A else headBB B.next if B else headAreturn A

gt9x双击唤醒屏幕

里面可以看到irq 和 rst的gpio引脚从设备树获取失败&#xff0c;排查设备树发现是属性名写错了&#xff1a; c &i2c1 {status "okay";goodix_ts5d {compatible "goodix,gt9xx";reg <0x5d>;// tp-size <89>;touchscreen-size-x <12…

6.1触发器的创建、删除和使用

6.1.1 触发器概述 触发器是一个被指定关联到表的数据库对象&#xff0c;与表的关系密切&#xff0c;不需要用户调用&#xff0c;在一个表的特定事件出现时将会被激活&#xff0c;此时某些MySql语句会自动执行。 触发器用于实现数据库的完整性&#xff0c;具有以下特点&#xff…

深入了解RSA加密算法

目录 前言 一、什么是RSA&#xff1f; 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代&#xff0c;信息的安全性成为了人们关注…