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…

数据赋能(121)——体系:数据清洗——实施过程、应用特点

实施过程 数据清洗的实施过程是一个复杂而关键的任务,它涉及多个步骤以确保数据的准确性和一致性。以下是数据清洗通常需要进行的操作包括: 纠正错误: 识别和纠正数据中的错误,如拼写错误、编码错误、计算错误等。对于某些数据&…

贪心算法学习五

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

Docker 安装 MySQL5.7 和 MySQL8

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

使用 `millis()` 函数在 Arduino 编程中实现非阻塞延时(水泵/继电器不受控制为例)

在 Arduino 编程中,delay() 函数是一个常见的工具,用于创建代码执行的延时。然而,delay() 函数的一个显著缺点是它会阻塞代码的执行。这意味着当 delay() 函数运行时,Arduino 将暂停其他所有的操作,直到延时结束。这种…

小工具开发

因不太喜欢重复性工作,为了提高日常工作效率,在业余时间开发一些小工具用于帮助自己“偷懒”。 小工具功能: 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), &…

java-接口 2

### 7. 接口的设计原则 #### 7.1 接口隔离原则(ISP) 接口隔离原则(Interface Segregation Principle, ISP)建议将大的接口分解为多个小接口,每个接口只包含客户所需的方法。这使得实现类 只需实现其真正需要的接口&…

KindleUnpack - Python解压Amazon / Kindlegen生成的电子书

文章目录 关于 KindleUnpack使用选项 关于 KindleUnpack github : https://github.com/kevinhendricks/KindleUnpack KindleUnpack 是基于python的软件来解压Amazon / Kindlegen生成的电子书 KindleUnpack将非drm Kindle/MobiPocket电子书解压到其组件中 根据正在处理的Kindl…

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…

PostgreSQL如何使修改的参数生效

PostgreSQL如何使修改的参数生效 在 PostgreSQL 中&#xff0c;配置参数的更改往往需要不同的方式来使其生效。根据参数的不同&#xff0c;它们的生效方式可能有所区别&#xff0c;例如&#xff1a; 立即生效&#xff1a;某些参数可以通过会话级别的设置即时生效&#xff0c;…

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…

springboot-自定义properties文件

在springboot中&#xff0c;如果我们想加载外部的配置文件&#xff0c;但是又不想与其他的配置文件产生明显的耦合&#xff0c;那么我们可以把这些配置文件&#xff0c;单独弄成一个独立的配置文件&#xff0c;比如下面的配置文件&#xff0c;我们想把这些配置移动到user.prope…

CountDownLatch案例

CountDownLatch&#xff08;倒计时门闩&#xff09;是Java并发编程中的一个同步工具&#xff0c;其作用是允许一个或多个线程等待其他线程完成操作后再继续执行。具体来说&#xff0c;它通常用于以下场景&#xff1a; 等待其他线程完成某项操作&#xff1a; 一个或多个线程需要…

element-vue3-admin用router.push跳转新页面并刷新新页面

element-vue3-admin用router.push跳转新页面并刷新新页面 方法一&#xff1a;使用key属性强制刷新1.首先在invex.vue页面加上router-view标签对2.然后在add.vue页面加入如下代码 方法二&#xff1a;使用location.reload()在add.vue页面加入location.reload()强制浏览器刷新整个…