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流非正常关闭引起的“不可预料的压缩文件末端”的解决办法相关推荐

  1. java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式

    java字节流怎么读取数据 字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNot ...

  2. Java - 文件(IO流)

    Java - 文件 (IO) 流的分类:     > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter     & ...

  3. 【Java网络编程与IO流】Java之Java Servlet详解

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  4. 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  5. 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>

    打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...

  6. JAVA File类、IO流体验与简介(字节流、字符流、序列流、打印流、编码、递归)

    1. File类 1.1. File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动 ...

  7. 零基础学Python(第十八章 文件IO流操作)

    本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章内容为: ...

  8. JAVA学生信息管理系统IO流版

    JAVA学生信息管理系统IO流版 1. Student类 public class Student implements Serializable{//学号private int sid;//姓名pr ...

  9. java导出jar包后,程序运行时读取图片、音乐资源文件

    java导出jar包后,程序运行时读取图片.音乐资源文件 运行时程序就可以把图片.音乐资源加载进入了 start jre/bin/java -jar 名称.jar

  10. GitLabCICD实战----在.gitlab-ci.yml文件的步骤中使用git clone 另一个代码仓报错的解决办法

    更多信息请关注 个人网站 一.背景 在有些时候,比如在一个项目中,产品的代码是java代码仓,自动化测试脚本是python语言,单独存放的代码仓,在使用GitlabCICD构建流水线的时候有这样一种场 ...

最新文章

  1. Caffe源码中Solver文件分析
  2. python3 修改字符串的四种方法 错误 'str' object does not support item assignment 解决方法
  3. 【美文】没有人会根据你平庸的现在就能推断出你辉煌的将来
  4. java枚举类使用 == 还是equals来进行比较
  5. 【Linux】一步一步学Linux——useradd命令(82)
  6. bootstraptable 分页循环_关于bootstrap-table服务端分页问题
  7. 2 操作系统第一章 操作系统体系结构、中断和异常、系统调用
  8. JavaScript-操作DOM对象-获得dom节点
  9. windows环境下的YOLO3入门,及opencv344配置
  10. Android属性动画
  11. 微信小程序毕业设计 基于微信小程序外卖点餐系统开题报告
  12. Kali Rolling更换登录界面的背景
  13. ln火线零线_插座怎么接LN线
  14. 【产品经理】产品经理进阶之路(六):互联网思维详解
  15. MVP前奏(二)MVC在Android的小短腿
  16. 盘点那些与动植物有关的姓氏,鼠、蛇、蒲、枣、桂...都是姓氏
  17. android svg 线条动画教程,简单的SVG线条动画
  18. 前端数据库indexedDB入门
  19. java架构师视频,附源代码
  20. 浅析uthash系列之User Guide(翻译)

热门文章

  1. 【BZOJ1491】[NOI2007]社交网络 Floyd
  2. Web基础——CSS基础概念(2)
  3. hdu4415 Assassin's Creed
  4. opengl绘制立方体
  5. Data must be padded to 16 byte boundary in CBC mode
  6. nu.xom:Attribute
  7. 利用sklearn.cluster实现k均值聚类
  8. EasyUI 日历实现日程提醒
  9. .tpk格式文件简介
  10. 录屏鼠标光标圆圈如何实现_录屏鼠标光标圆圈如何实现