java 导出压缩文件,IO流非正常关闭引起的“不可预料的压缩文件末端”的解决办法
java使用IO流对文件的加密,解密时,因为对文件的流没有正常的关闭,或者是没有按照后打开的流先关闭的顺序,结果造成了个人文件的Bug,如压缩文件,报错如图:
原代码:
public static void decryptFile(String sourcePath, String targetPath) {try {byte[] bytes = IoUtil.readBytes(new FileInputStream(sourcePath));ByteArrayInputStream byteArrayInputStream = IoUtil.toStream(bytes);Cipher cipher = generateCipher(Cipher.DECRYPT_MODE);OutputStream out = new FileOutputStream(targetPath);CipherOutputStream cipherOutputStream = new CipherOutputStream(out, cipher);IoUtil.copy(byteArrayInputStream, cipherOutputStream);IoUtil.close(byteArrayInputStream);IoUtil.close(out);IoUtil.close(cipherOutputStream);} catch (IOException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchProviderException e) {e.printStackTrace();}}
修改后的代码:
public static void decryptFile(String sourcePath, String targetPath) {FileInputStream in =null;ByteArrayInputStream byteArrayInputStream =null;OutputStream out = null;CipherOutputStream cipherOutputStream=null;try {in = new FileInputStream(sourcePath);byte[] bytes = IoUtil.readBytes(in);byteArrayInputStream = IoUtil.toStream(bytes);Cipher cipher = generateCipher(Cipher.DECRYPT_MODE);out = new FileOutputStream(targetPath);cipherOutputStream = new CipherOutputStream(out, cipher);IoUtil.copy(byteArrayInputStream, cipherOutputStream);} catch (IOException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchProviderException e) {e.printStackTrace();}finally {IoUtil.close(cipherOutputStream);IoUtil.close(out);IoUtil.close(byteArrayInputStream);IoUtil.close(in);}}
再次执行代码,文件正常!
所以,对文件流的操作一定要特别注意关闭的操作!!!
java 导出压缩文件,IO流非正常关闭引起的“不可预料的压缩文件末端”的解决办法相关推荐
- java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式
java字节流怎么读取数据 字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNot ...
- Java - 文件(IO流)
Java - 文件 (IO) 流的分类: > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter & ...
- 【Java网络编程与IO流】Java之Java Servlet详解
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>
打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...
- JAVA File类、IO流体验与简介(字节流、字符流、序列流、打印流、编码、递归)
1. File类 1.1. File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动 ...
- 零基础学Python(第十八章 文件IO流操作)
本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章内容为: ...
- JAVA学生信息管理系统IO流版
JAVA学生信息管理系统IO流版 1. Student类 public class Student implements Serializable{//学号private int sid;//姓名pr ...
- java导出jar包后,程序运行时读取图片、音乐资源文件
java导出jar包后,程序运行时读取图片.音乐资源文件 运行时程序就可以把图片.音乐资源加载进入了 start jre/bin/java -jar 名称.jar
- GitLabCICD实战----在.gitlab-ci.yml文件的步骤中使用git clone 另一个代码仓报错的解决办法
更多信息请关注 个人网站 一.背景 在有些时候,比如在一个项目中,产品的代码是java代码仓,自动化测试脚本是python语言,单独存放的代码仓,在使用GitlabCICD构建流水线的时候有这样一种场 ...
最新文章
- Caffe源码中Solver文件分析
- python3 修改字符串的四种方法 错误 'str' object does not support item assignment 解决方法
- 【美文】没有人会根据你平庸的现在就能推断出你辉煌的将来
- java枚举类使用 == 还是equals来进行比较
- 【Linux】一步一步学Linux——useradd命令(82)
- bootstraptable 分页循环_关于bootstrap-table服务端分页问题
- 2 操作系统第一章 操作系统体系结构、中断和异常、系统调用
- JavaScript-操作DOM对象-获得dom节点
- windows环境下的YOLO3入门,及opencv344配置
- Android属性动画
- 微信小程序毕业设计 基于微信小程序外卖点餐系统开题报告
- Kali Rolling更换登录界面的背景
- ln火线零线_插座怎么接LN线
- 【产品经理】产品经理进阶之路(六):互联网思维详解
- MVP前奏(二)MVC在Android的小短腿
- 盘点那些与动植物有关的姓氏,鼠、蛇、蒲、枣、桂...都是姓氏
- android svg 线条动画教程,简单的SVG线条动画
- 前端数据库indexedDB入门
- java架构师视频,附源代码
- 浅析uthash系列之User Guide(翻译)