程序员都知道,对于计算机资源的利用必须严谨,在使用完资源后一定要释放它,否则就会造成内存泄漏,资源一直占用的危害。今天笔者就对文件IO操作完后,没有关闭流造成一定的问题,在拍错过程中也是有一定的难度。以下为对多个文件进行压缩的方法:

 /*** 将多个文件打包成压缩包* @param srcFiles* @param zipFile*/public static void zipFiles(List<File> srcFiles, File zipFile) {// 判断压缩后的文件存在不,不存在则创建if (!zipFile.exists()) {try {zipFile.createNewFile();} catch (IOException e) {logger.error("创建压缩包文件出错",e);}}// 创建 FileOutputStream 对象FileOutputStream fileOutputStream = null;// 创建 ZipOutputStreamZipOutputStream zipOutputStream = null;// 创建 FileInputStream 对象FileInputStream fileInputStream = null;try {// 实例化 FileOutputStream 对象fileOutputStream = new FileOutputStream(zipFile);// 实例化 ZipOutputStream 对象zipOutputStream = new ZipOutputStream(fileOutputStream);// 创建 ZipEntry 对象ZipEntry zipEntry = null;// 遍历源文件数组for (int i = 0; i < srcFiles.size(); i++) {// 将源文件数组中的当前文件读入 FileInputStream 流中fileInputStream = new FileInputStream(srcFiles.get(i));// 实例化 ZipEntry 对象,源文件数组中的当前文件zipEntry = new ZipEntry(srcFiles.get(i).getName());zipOutputStream.putNextEntry(zipEntry);// 该变量记录每次真正读的字节个数int len;// 定义每次读取的字节数组byte[] buffer = new byte[1024];while ((len = fileInputStream.read(buffer)) > 0) {zipOutputStream.write(buffer, 0, len);}}zipOutputStream.closeEntry();zipOutputStream.close();fileInputStream.close();//------------错误---------------fileOutputStream.close();} catch (IOException e) {logger.error("压缩文件出错",e);}}
  • 乍一看这段代码并没有什么大问题,就是给多个文件生成压缩包,但是一般情况下,生成压缩包后需要删除原始文件只保留压缩包,在这里会出现的问题是,在删除原始文件时只能删除 最后一个文件,其余的文件没办法删除。(Windows上会出现这个问题,Linux与Mac上并不会)
  • 此时笔者在进行错误排查时也是很想不通,如果删除文件的操作出错,但是为什么能删除部分文件,其余的删除不了。也想到过没有关闭文件流造成的文件删除不成功,但是如果文件流没关闭应该是都没关闭才对,经过多次实验发现每次都只能删除压缩文件时的最后一个文件,所以检查压缩方法,发现关闭文件流是在所有的文件压缩进去后关闭,所以之前的文件都没有被释放,只释放了最后一次,所以造成了这种问题。

所以在开发过程中,代码逻辑一定要严谨,否则会出现意想不到的损失。

论写代码时逻辑要严谨的重要性相关推荐

  1. 随笔 | 写代码时极有可能面临的焦虑

    随笔 | 写代码时极有可能面临的焦虑 本科学管理,被诸如<市场营销学>这类课程的作业搞得焦头烂额时,就会羡慕学计算机(或更广一点如「工科」)的同学:工程问题,有绝对的标准与尺度:不像这种经 ...

  2. 写代码时尽量少用复制粘贴(ctrl+c, ctrl+v)

    我们在写代码时经常会参考其他人编写的代码或者是从网上搜索查看需要实现的功能用那些代码,这个时候,很多人会很自然的("ctrl+c", "ctrl+v"),简单轻 ...

  3. 关于在写代码时如何使用绝对路径与相对路径及其简单介绍

    在写代码时,我们经常需要使用到其他的一些资源,但是对于一些像我这样经常用绝对路径不用相对路径的新手菜鸟来说,看网上的那些关于绝对路径相对路径的介绍资料也有点难理解,毕竟-没试过的话确实不大能理解. 所 ...

  4. VSCode内用markdown写代码时出现很多段落标记的解决方案

    在VSCode内用markdown写代码时,出现很多段落标记如下图所示. 开始以为是代码的问题,粘贴了很多次,不行. 把代码放在记事本里,粘贴过来,不行. 敲一段代码试试,也不行. 看来是文件本身出了 ...

  5. 在公司写代码时,我总想回家带娃。

    桔妹导读:离天空最近的地方,是父亲的肩膀.在这个特别的日子里,小编也搜集了一些滴滴年轻的工程师奶爸们的分享,听他们聊一聊当爸的初体验.也借此机会祝福所有做了父亲的工程师们,节日快乐! 内心充满激动和紧 ...

  6. 小白用c++画出手枪,写代码时实属不易,请点赞加关注吧!

    大家好,今天屁孩君给大家带来用c++画出手枪写代码时实属不易,请点赞加关注吧! 废话不多说,直接上代码! #include<iostream> using namespace std; i ...

  7. 听说,有的程序员写代码时,耳机里放的是相声

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  8. 当我的生活只剩下写代码时

    我对很多事物都充满好奇,很想探究其中的原理及背后的东西. 记得大一那时,想自己做一个网站,于是到图书馆看HTML的书,那时恰好有个关于网站的比赛,于是以此为借口,买了台电脑--更好的借口是为了学习C语 ...

  9. keil写代码时遇到的问题——warning:implicit declaration of function XXXX is invalid in C99

    在用keil4写实验的时候,遇到了如标题所示的警告,warning:implicit declaration of function "XXXX" is invalid in C9 ...

最新文章

  1. Tech.ED 2009前瞻:认识System Center
  2. 小程序卡片叠层切换卡片_现在,卡片和清单在哪里?
  3. Codeforces 241B Friends 字典树
  4. 伺服电机常用参数设置_松下伺服电机一般都设置哪些参数
  5. POST参数转为DICT
  6. java实现界面化,java实现图形化界面
  7. 微云同步盘 linux,微云同步盘pc版下载
  8. 微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付
  9. (待补)(递归)九连环问题*
  10. windows powershell/cmd更改字体
  11. python简易程序教程_Python-自制简易程序挂机刷御魂
  12. MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(附实战应用案例)
  13. Bootstrap-table 显示数据到表格
  14. 10月9日模拟题解题报告
  15. 第一行代码 (第三版) 第八,九,十章
  16. 汉字的国标码和机内码是怎么回事?
  17. 深度学习中的知识蒸馏技术(下)
  18. 【uniapp】uniapp安卓APP在线自动升级功能
  19. matlab生成exe执行doc太快,matlab编写的程序生成exe可执行文件的方法.doc
  20. 区块链项目【拼爹爹电商app】开源

热门文章

  1. NO.0 QN9021 开发准备工作
  2. KDBC——9293详解
  3. 第一次使用国产芯片--芯旺微--KungFu--ChipOn
  4. 服务器的系统和NAS有啥区别,nas和云服务器区别
  5. React初级篇————基础项目搭建以及环境配置
  6. adb 屏幕滑动_安卓通过adb 模拟键盘输入、点击屏幕、滑动、按键
  7. Unity3D New Input System 鼠标左键单击、双击、长按配置及实现接口多态用法(一)
  8. 出现“您的硬件设置已更改,请重新启动计算机,使这些更改生效”导致扬声器无法使用
  9. 帮推|2022 Neo全球开发者黑客松大赛「国内高校赛区」首次启动!
  10. 在线教育行业十大盈利模式分析