Java io流 解压缩多个文件 损坏问题解决
我想要解压一个目录下的三个文件,其中一个是Excel两个是pdf文件,但是利用代码解压出来后Excel会损坏,文件大小比源文件小,pdf文件可以正常打开但是会损失一些莫名的画面
比如我的pdf是合同,里面竟然有字但是公司盖的章就没有了,这是代码问题!
解决办法:
我是同一个方法中先生成了3个文件紧接着就调用解压方法去解压这三个文件,其实这是不对的。
我们应该先关闭生成这3个文件的流,在close()的时候会自动调用flush()刷新缓冲区,这样子我们会保证文件的完整性。
这时候再调用解压缩文件的方法,至于解压缩的close就在解压缩方法中关闭即可!
最后提一嘴,在循环new一个流的时候,一定要在循环中close()!
关闭一个流就必须用一个try-catch,不要为了省事用一个try-catch关闭所有流,不然如果前面的流报错了,后面的流是无法关闭的!
解决问题之前我的代码步骤如下:
1.生成三个文件
2.解压缩
3.finally中关闭三个文件用到的应该关闭的流
解决问题之后我的步骤:
1.生成三个文件
2.不用finally,一个try-catch关闭一个流,关闭三个文件用到的所有流
3.调用解压缩方法(解压缩的流在解压缩方法中关闭)
下面是我查找资料找到的解压缩方法,需要的同学直接copy吧. ↓↓↓↓↓↓↓
/*** * @param sourceFilePath 需要压缩的文件夹* @param zipFilePath 压缩包的存放位置* @param fileName 压缩包名称* @return*/// 不能压缩单独文件,文件夹中没有东西也不行!必须压缩一个文件夹,有特殊需要就自己修改一下代码。public static boolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) {boolean flag = false;File sourceFile = new File(sourceFilePath);FileInputStream fis = null;BufferedInputStream bis = null;FileOutputStream fos = null;ZipOutputStream zos = null;if (!sourceFile.exists()) {} else {try {File zipFile = new File(zipFilePath + "/" + fileName + ".zip");if (zipFile.exists()) {return true;} else {File[] sourceFiles = sourceFile.listFiles();if (null == sourceFiles || sourceFiles.length < 1) {// System.out.println(”待压缩的文件目录:” + sourceFilePath + “里面不存在文件,无需压缩.”);} else {fos = new FileOutputStream(zipFile);zos = new ZipOutputStream(new BufferedOutputStream(fos));byte[] bufs = new byte[1024*10];for (File file : sourceFiles) {//创建ZIP实体,并添加进压缩包ZipEntry zipEntry = new ZipEntry(file.getName());zos.setLevel(9);zos.putNextEntry(zipEntry);//读取待压缩的文件并写进压缩包里fis = new FileInputStream(file);bis = new BufferedInputStream(fis, 1024 * 10);int read = 0;while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {zos.write(bufs, 0, read);}//一定在循环中关闭流,不然流会出现关闭不全的情况!!!bis.close();}flag = true;}}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);} finally {//关闭流,不要图省事,一定要一个try-catch对应关闭一个流!//最后开的流最先关,就按照这个顺序关闭!不懂的看我代码顺序摸索一下。//Buffered这种流如果里面包含了其他流//比如我这段bis对象包含了fis,就只需要关闭bis流即可!//因为它会调用fis的close(),会把自己的儿子也关了,这个你不用操心了!try {if (null != bis) {bis.close();}} catch (IOException e) {e.printStackTrace();}try {if (null != zos) {zos.close();}} catch (IOException e) {e.printStackTrace();}}}return flag;}
Java io流 解压缩多个文件 损坏问题解决相关推荐
- java IO流(一)文件, InputStream,OutputStream,Reader,Writer
JAVA IO流(一) (一) 文件 1.概念 文件就是保存数据的地方 文件流 文件在程序中是以流的形式来操作的. java程序(内存) <--------> 文件(磁盘) 输入,输出是针 ...
- JAVA~~IO流和文件
Io流的分类 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Read). 从内存中出来,叫做输出(Outpu ...
- Java读取文件流用什么对象_使用Java IO流实现对文本文件的读写过程中,通常需要处理下列( )异常。_学小易找答案...
[论述题]请根据第一次平时作业的选题,结合第二次课内容,自拟一个论文提纲. [单选题]在 switch ( expression )语句中, expression 的数据类型不能是 ( ) [单选题] ...
- java io流(字符流) 文件打开、读取文件、关闭文件
java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*;public class Index{public stati ...
- java io流 教程_Java基础教程:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:指的是从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列 ...
- Java io流---拷贝文件夹下的所有文件和目录
Java io流-拷贝文件夹下的所有文件和目录 代码: package demo01;import java.io.*; import java.util.TreeMap;public class C ...
- java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考
在学习了<文件传输基础--Java IO流> 课程后,发现自己对flush()方法的调用有很多疑惑.在查询资料和自己看源码以及动手试验之后发现有以下几个特点.如有误也请大家指正出来,一切为 ...
- java 弹出另存为_java如何实现 io流传输过来的文件,提示另存为弹出窗口?
java如何实现 io流传输过来的文件,提示另存为弹出窗口? mip版 关注:166 答案:6 悬赏:0 解决时间 2021-01-24 22:00 已解决 2021-01-24 11:06 最 ...
- java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
一.概念 1.1.按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 1.2.按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图 ...
最新文章
- JavaScript 之 特殊运算符
- 为什么发了个博客分分钟被各种网站花式转载=。=而不通知我
- GDCM:二个DICOM文件的diff差异的测试程序
- PHP面向对象(OOP)编程入门教程
- python安装pyinstaller库_python pyinstaller安装
- Mozilla Firefox 10.0 beta4 发布
- 混凝土墙开洞_新乐专业混凝土切割报价适中
- 基于Redis实现简单的分布式锁
- 用C语言编写猴子选大王程序(数据结构)
- 搜狗AI,正在抢滩智能手机
- 1. Windows网络编程(C++ Socket编程)
- Kaggle 大师访谈:我的 ML 竞赛之旅
- 相关性分析及SPSS软件操作
- 数据分析十年来电影票房数据
- sqlServer2014用sql server身份认证登录
- 利用最小二乘法进行参数估计
- 勇敢面对人生的苦难,时光不负赶路人
- 高德地图嵌入到threejs全景中的踩坑指南
- 68000多只海洋动物、占地18.3万平米,这才是全球最大海洋水族馆该有的气势!...
- linux无法运行sssverify,Synopsys Design Compiler在fedora Core 9下面的安装
热门文章
- 服装扣件行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- python爬虫win10程序_Python爬虫教程:批量提取Win10锁屏壁纸
- uni-app的学习及使用
- php 无限子站cms,PHP整理CMS无限层级目录(毗邻目录模式)
- 如何通过虚拟机和真实网线调试设备
- 浙江移动盒子魔和m401h 2+8G破解使用网络安装软件
- 孙鑫VC++深入详解第三章学习笔记
- GITC2016花落上海,五大亮点抢先看
- cp7s2装Linux,基礎級拆機-神舟戰神GX8CP5s1上8700發現較為雞肋-仿CP7s2
- java 参数不知道类型_java – 类型参数不在其范围内