java文件压缩加密,使用流的方式

使用net.lingala.zip4j来进行文件加密压缩。

添加依赖net.lingala.zip4j包依赖,这里使用的是最新的包2.11.5版本。

<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>${zip4j.version}</version>
</dependency>

使用ZipFile加密压缩文件

 public static void main(String[] args) throws Exception{ZipParameters zipParameters = new ZipParameters();zipParameters.setEncryptFiles(true);zipParameters.setEncryptionMethod(EncryptionMethod.AES);// Below line is optional. AES 256 is used by default. // You can override it to use AES 128. AES 192 is supported only for extracting.zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);List<File> filesToAdd = Arrays.asList(new File("F:\\test1.txt"),new File("F:\\test2.txt"));ZipFile zipFile = new ZipFile("F:\\test.zip", "test".toCharArray());zipFile.addFiles(filesToAdd, zipParameters);}

执行程序,压缩后:
在这里插入图片描述
网上能找到的基本的的参考例子都是这个,但是我们真正使用的时候是不会从本地读取文件的方式的,是使用流的方式,入参,出参都应该是个流。官方文档也提供了使用流的方式压缩文件的。

使用ZipOutputStream加密压缩文件

public static void main(String[] args) throws Exception {String password = "test";List<File> filesToAdd = Arrays.asList(new File("F:\\test1.txt"),new File("F:\\test2.txt"));byte[] buff = new byte[4096];int readLen;ByteArrayOutputStream bos = new ByteArrayOutputStream();try(ZipOutputStream zipOutputStream = new ZipOutputStream(bos, password.toCharArray(), Charset.defaultCharset())) {for (File fileToAdd : filesToAdd) {ZipParameters parameters = new ZipParameters();parameters.setEncryptionMethod(EncryptionMethod.AES);parameters.setEncryptFiles(true);parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);parameters.setFileNameInZip(fileToAdd.getName());zipOutputStream.putNextEntry(parameters);try(InputStream inputStream = new FileInputStream(fileToAdd)) {
//                    zipOutputStream.write(inputStream.readAllBytes());while ((readLen = inputStream.read(buff)) != -1) {zipOutputStream.write(buff, 0, readLen);}}zipOutputStream.closeEntry();}}try (FileOutputStream fileOutputStream = new FileOutputStream("F:\\test.zip")){fileOutputStream.write(bos.toByteArray());}}

这里说一下像ByteArrayOutputStream这种内存流是不用关闭的,这种的不使用的时候会自动回收了,只有FileOutputStream这种操作了磁盘,或者网络,IO的需要手动关闭,这里放到try块去,自动调用close方法。

官方文档:https://github.com/srikanth-lingala/zip4j

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

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

相关文章

微服务调用链路追踪

概述 本文介绍微服务调用链路追踪&#xff0c;涉及技术有&#xff1a;sleuth和zipkin。sleuth负责追踪调用链路数据&#xff0c;zipkin负责调用链路数据可视化展现。 本文的操作是在 服务网关实践 的基础上进行。 环境说明 jdk1.8 maven3.6.3 mysql8 spring cloud2021.0.8 …

【Python仿真】基于EKF的传感器融合定位

基于EKF的传感器融合定位&#xff08;Python仿真&#xff09; 简述1. 背景介绍1.1. EKF扩展卡尔曼滤波1.1.1.概念1.1.2. 扩展卡尔曼滤波的主要步骤如下&#xff1a;1.1.3. 优、缺点 1.2. 航位推算1.3. 目前航位算法的使用通常与卡尔曼滤波相结合使用2. 分段代码 2.1. 导入需要的…

wpf devexpress 添加GanttControl到项目

这个教程示范如何添加GanttControl 到你的项目使用内置GanttControl数据类。 要求 添加 Devexpress.Wpf.Gantt Nuget包到你的项目使用GanttControl. 数据模型 GanttControl携带和内置数据对象&#xff0c;可以使用创建视图模型&#xff1a; GanttTask 呈现甘特图任务 Gan…

Python算法——树的最大深度和最小深度

Python中的树的最大深度和最小深度算法详解 树的最大深度和最小深度是树结构中的两个关键指标&#xff0c;它们分别表示树的从根节点到最深叶子节点的最大路径长度和最小路径长度。在本文中&#xff0c;我们将深入讨论如何计算树的最大深度和最小深度&#xff0c;并提供Python…

记录将excel表无变形的弄进word里面来

之前关于这个问题记录过一篇文章&#xff1a; 将excel中的表快速复制粘贴进word中且不变形-CSDN博客 今天记录另外一种方法&#xff1a;举例表述&#xff0c;excel表如图&#xff1a; 按F12&#xff0c;出现“另存为...”对话框&#xff0c;选择“单个文件网页”&#xff0c;…

面向对象与面向过程的区别

面向对象 以对象为中心&#xff0c;把数据封装成为一个整体&#xff0c;其他数据无法直接修改它的数据&#xff0c;将问题分解成不同对象&#xff0c;然后给予对象相应的属性和行为。 面向过程 关注代码过程&#xff0c;直接一程序来处理数据&#xff0c;各模块之间有调用与…

C#_模拟鼠标操作

一、class class MouseHelper{[DllImport("user32.dll")]public static extern bool SetCursorPos(int X, int Y);[System.Runtime.InteropServices.DllImport("user32")]public static extern int mouse_event(int dwFlags, int dx, int dy, int dwData, …

大数据-之LibrA数据库系统告警处理(ALM-12055 证书文件即将过期)

告警解释 系统每天二十三点检查一次当前系统中的证书文件&#xff0c;如果当前时间距离过期时间不足告警阈值天数&#xff0c;则证书文件即将过期&#xff0c;产生该告警。告警阈值天数的配置请参考《管理员指南》的“配置证书即将过期告警阈值”章节。 当重新导入一个正常证…

oracle-buffer cache

段&#xff0c;区&#xff0c;块。 每当新建一个表&#xff0c;数据库会相应创建一个段。然后给这个段分配一个区。 一个区包含多个块。 区是oracle给段分配空间的最小单位。 块是oracle i\o的最小单位。 原则上&#xff0c;一个块包含多行数据。 dbf文件会被划分成一个一个…

Netty Review - 核心组件扫盲

文章目录 PreNetty Reactor 的工作架构图CodePOMServerClient Netty 重要组件taskQueue任务队列scheduleTaskQueue延时任务队列Future异步机制Bootstrap与ServerBootStrapgroup()channel()option()与childOption()ChannelPipelinebind()优雅地关闭EventLoopGroupChannleChannel…

今天遇到Windows 10里安装的Ubuntu(WSL)的缺点

随着技术的发展&#xff0c;越来越多开发者转向使用 Windows Subsystem for Linux&#xff08;WSL&#xff09;在 Windows 10 上进行开发&#xff0c;也就是说不用虚拟机&#xff0c;不用准备多一台电脑&#xff0c;只需要在Windows 10/11 里安装 WSL 就能体验 Linux 系统。因此…

C# Array和ArrayList有什么区别

在C#中&#xff0c;Array和ArrayList是集合类型&#xff0c;用于存储一组元素&#xff0c;但它们之间有几个关键区别&#xff1a; 类型安全&#xff1a; Array是类型安全的&#xff0c;意味着它只能存储一种特定类型的元素。例如&#xff0c;一个int[]数组只能存储int类型的元素…

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动&#xff0c;活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主&#xff0c;活动形式为演讲、动手实操&#xff0c;让开发者通过一个下午的时间增进对 Ser…

how to find gcc openbug

https://gcc.gnu.org/bugzilla/query.cgi?formatadvanced

最全的接口自动化测试思路和实战:【推荐】混合测试自动化框架(关键字+数据驱动)

混合测试自动化框架(关键字数据驱动) 关键字驱动或表驱动的测试框架 这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具&#xff0c;并可以用来“驱动&#xff02;待测应用程序和数据的测试脚本代码&#xff0c;关键字驱动测试看上去与手工测…

mount /dev/mapper/centos-root on sysroot failed处理

今天发现centos7重启开不进去系统 通过查看日志主要告警如下 修复挂载目录 xfs_repair /dev/mapper/centos-root不行加-L参数 xfs_repair -L /dev/mapper/centos-root重启 reboot

云课五分钟-0Cg++默认版本和升级-std=c++17

前篇&#xff1a; 云课五分钟-0B快速排序C示例代码-注释和编译指令 视频&#xff1a; 云课五分钟-0Cg默认版本和升级-stdc17 文本&#xff1a; 在Linux系统中&#xff0c;可以通过以下步骤升级g&#xff1a; 打开终端&#xff0c;使用root权限或者sudo权限登录。输入以下命令…

基于灰狼算法(GWO)优化的VMD参数(GWO-VMD)

代码的使用说明 基于灰狼算法优化的VMD参数 代码的原理 基于灰狼算法&#xff08;Grey Wolf Optimizer, GWO&#xff09;优化的VMD参数&#xff08;GWO-VMD&#xff09;是一种结合了GWO和VMD算法的优化方法&#xff0c;用于信号分解和特征提取。 GWO是一种基于群体智能的优化…

lv11 嵌入式开发 ARM指令集中(伪操作与混合编程) 7

目录 1 伪指令 2 伪操作 3 C和汇编的混合编程 4 ATPCS协议 1 伪指令 本身不是指令&#xff0c;编译器可以将其替换成若干条等效指令 空指令NOP 指令LDR R1, [R2] 将R2指向的内存空间中的数据读取到R1寄存器 伪指令LDR R1, 0x12345678 R1 0x12345678 LDR伪指令可以将任…

【Python 千题 —— 基础篇】输出列表中的偶数

题目描述 题目描述 依次输出列表中所有的偶数。题中有一个包含数字的列表 [10, 39, 13, 48, 32, 18, 3, 204, 592, 11]&#xff0c;使用 for 循环依次输出这个列表中所有的偶数。 输入描述 无输入。 示例 示例 ① 输出&#xff1a; 10 48 32 18 204 592输出描述 输出列…