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.hqwc.cn/news/195866.html

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

相关文章

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…

Halcon Solution Guide I basics(1): Guide to Halcon Methods(Halcon解决方案)

文章目录 文章专栏前言文章解读基础解决方案字符串格式化 文章专栏 Halcon开发 前言 今天来看Halcon的第一章内容&#xff0c;Halcon解决方案 文章解读 基础解决方案 Halcon大部分的应用都使用了三种常用的算子应用用于图像的预处理。 Image Acquisition&#xff1a;图像加…

【算法】滑动窗口题单——2.不定长滑动窗口(求最长/最大)

文章目录 3. 无重复字符的最长子串1493. 删掉一个元素以后全为 1 的最长子数组904. 水果成篮1695. 删除子数组的最大得分2841. 几乎唯一子数组的最大和2024. 考试的最大困扰度1004. 最大连续1的个数 III1438. 绝对差不超过限制的最长连续子数组2401. 最长优雅子数组解法1——维…

Linux调试器---gdb的使用

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、gdb的背景 gdb&#xff0c;全称为GNU调试器&#xff08;GNU Debugger&#xff09;&#xff0c;是一个功能强大的源代码级调试工具&#xff0c;主要…

【Android Jetpack】Hilt的理解与浅析

文章目录 依赖注入DaggerHiltKoin添加依赖项Hilt常用注解的含义HiltAndroidAppAndroidEntryPointInjectModuleInstallInProvidesEntryPoint Hilt组件生命周期和作用域如何使用 Hilt 进行依赖注入 本文只是进行了简单入门&#xff0c;博客仅当做笔记用。 依赖注入 依赖注入是一…

一文了解Word2vec 阐述训练流程

一文了解Word2vec 阐述训练流程 个性嵌入&#xff08;Personality Embeddings&#xff09; 词嵌入&#xff08;Word Embeddings&#xff09; 嵌入向量效果分析 语言模型 模型介绍 模型训练 Word2vec训练方法 CBOW方法 Skip-gram方法 CBOW方法与Skip-gram方法总结 重构…

C++模拟实现——红黑树封装set和map

一、红黑树迭代器的实现 基本的框架和实现链表的迭代器思路是一样的&#xff0c;都是对指针进行封装处理&#xff0c;然后实现一些基本的运算符重载&#xff0c;最重要的是operator&#xff0c;需要不递归的实现走中序的规则&#xff0c;这里只实现那最核心的几个基本功能&…

源码分析Mybatis拦截器(Interceptor)拦截saveBatch()获取不到实体id的原因

1.背景 由于业务需求想在Mybatis拦截器层面获取insert后实体id去做相关业务。但是发现执行saveBatch()方法时&#xff0c;获取参数实体的时候&#xff0c;拿不到自增id。但是save()方法可以。 save方法之所以可以是因为&#xff1a; MybatisPlus的BaseMapper执行insert方法后…

基于单片机16路抢答器仿真系统

**单片机设计介绍&#xff0c; 基于单片机16路抢答器仿真系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的16路抢答器仿真系统是一种用于模拟和实现抢答竞赛的系统。该系统由硬件和软件两部分组成。 硬件方面&am…

配置iTerm2打开自动执行命令

打开iTerm2&#xff0c;commado&#xff0c;打开profies->edit profies&#xff0c;点击号&#xff0c;创建一个新的profile 在新的profile中填写 name&#xff1a;随意 command&#xff1a;Login Shell Send text at start&#xff1a;执行脚本的命令&#xff0c;不想写路…

Linux虚拟机中网络连接的三种方式

Linux 虚拟机中网络连接的三种方式 先假设一个场景&#xff0c;在教室中有三个人&#xff1a;张三、李四和王五&#xff08;这三个人每人有一台主机&#xff09;&#xff0c;他们三个同处于一个网段中&#xff08;192.169.0.XX&#xff09;&#xff0c;也就是说他们三个之间可…

CSS的选择器(一篇文章齐全)

目录 Day26&#xff1a;CSS的选择器 1、CSS的引入方式 2、CSS的选择器 2.1 基本选择器​编辑 2.2 组合选择器 2.3 属性选择器 2.4 伪类选择器 2.5 样式继承 2.6 选择器优先级 3、CSS的属性操作 3.1 文本属性 3.2 背景属性 3.3 边框属性 3.4 列表属性 3.5 dispal…