java用zipOutputStream压缩后用WinRAR解压出现“不可预料的压缩文件末端”错误
问题解压文件出现“不可预料的压缩文件末端”错误,用360解压和快压解压没有问题,用WinRAR解压出错
后台代码压缩方法
/*** 递归压缩文件夹* @param srcRootDir 压缩文件夹根目录的子路径* @param file 当前递归压缩的文件或目录对象* @param zos 压缩文件存储对象* @throws Exception*/
public static void zip(String srcRootDir, File file, ZipOutputStream zos) throws Exception{if (file == null) {return;} String subPath = file.getAbsolutePath();int index = subPath.indexOf(srcRootDir);if (index != -1) {subPath = subPath.substring(srcRootDir.length());}//如果是文件,则直接压缩该文件if (file.isFile()) { int count, bufferLen = 1024;byte data[] = new byte[bufferLen];//获取文件相对于压缩文件夹根目录的子路径zos.putNextEntry(new ZipEntry(subPath));BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));while ((count = bis.read(data, 0, bufferLen)) != -1) {zos.write(data, 0, count);}bis.close();zos.closeEntry();}else {//压缩目录中的文件或子目录File[] childFiles = file.listFiles();if(childFiles.length==0){zos.putNextEntry(new ZipEntry(subPath+"/"));}else{for (int n=0; n<childFiles.length; n++) {childFiles[n].getAbsolutePath().indexOf(file.getAbsolutePath());zip(srcRootDir, childFiles[n], zos);}}}}
调用zipUtil.zip方法
ZipOutputStream out = new ZipOutputStream(fileOutStream);
ZipUtil.zip(infile.getAbsolutePath() , infile, out);
out.close();//之前只关闭out.closeEntry() 并没有将out流关闭
fileOutStream.close();
ZipOutStream 最开始调用closeEntry()去关闭流,以为跟close(方法一样,导致了解压文件出错。流关闭一定要用close(),closeEntry()关闭是针对往压缩文件写入实体,之后在调用closeEntry(),这两个有这很大的区别。
总结下
(1)出现解压出错,可以先排查是否流没有进行关闭
(2)排查流的关闭顺序是否正确,先打开的流,最后关闭。
java用zipOutputStream压缩后用WinRAR解压出现“不可预料的压缩文件末端”错误相关推荐
- 将一段压缩后的字符串解压,并且顺序输出
将一段压缩后的字符串解压,并且顺序输出. 算法描述: 解压规则: 每个字符串后面跟着一个数字,表示这个字符重复的次数. 例如:'a5'解压后为'aaaaa', 'abc3'解压后为'abcabcbac ...
- c# 压缩html,纯JS解压文本,使用C#GZIPStream压缩
Pako 是一个完整的和现代的 Zlib 港口. 这里有一个非常简单的例子,你可以从那里工作. pako.js 你可以像这样解压: Gunzipping binary gzipped string / ...
- WinRAR解压兵贵神速
经常解压文件的朋友们可能知道,我们在使用WinRAR解压一些较大的压缩文件时速度总是很慢.造成这个现象的原因是由于在默认情况下WinRAR的临时文件解压文件一般都是放在"C:\Documen ...
- 如何用WinRAR解压.7z.00x分卷压缩文件
如何用WinRAR解压.7z.00x分卷压缩文件 在win10操作系统中,在D:\Test\test的目录下有若干test.7z.00x分卷压缩文件(后缀从001到00x),下面以test.7z. ...
- Linux学习笔记017---文件解压命令的使用_压缩解压
JAVA技术交流QQ群:170933152 找了两个,第一个好点,压缩 [root@sqb-v06 local]# tar -zcvf /usr/local/nginx-1.7.4_tar.gz /u ...
- linux 解压所有以zip结尾的文件_Linux下的压缩zip,解压缩unzip命令详解及实例
摘自:https://www.cnblogs.com/yves0923/p/10965021.html Linux下的压缩解压缩命令详解及实例 实例:压缩服务器上当前目录的内容为xxx.zip文件 z ...
- 设置winrar解压war文件
设置winrar解压war文件 前言 设置winrar解压的格式 1. 打开WinRAR, 选项->设置 2. 点击"集成" 3. 效果展示 前言 压缩软件改用了winrar ...
- 您必须有下列压缩分卷才能继续解压
这要求将同一个项目的所有文件放一起后才可解压,目前正在解压的文件有一部分在下一个压缩文件里. 我解压112文件,要求有113才能解压 所以要按照它的要求尽量下全文件后解压
- linux 解压 视频插件,linux下压缩解压缩命令
zip/gzip 命令 linux zip命令参数列表: -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩之后,删除源文件 -n 特定字符串 不压缩具 ...
- C# 关于压缩、加密、解压问题
本文探讨的是关于C#TXT文件的压缩.加密以及解压问题,采用的是密钥方式,可以先进行加密再进行压缩包导入到桌面. 界面如下: 源文件:想要压缩的TXT文件,里边必须有东西,不然代码会报错 压缩文件:要 ...
最新文章
- Python的常用包有哪些,分别有什么作用?
- Ansible简单介绍及安装部署详解
- JAVAEE框架之Spring AOP
- C++模板剖析:函数模板、类模板解析
- html-表单的应用
- 【华为云技术分享】大数据实践解析(下):Spark的读写流程分析
- android textview 动态高度自适应,TextView自适应高度(解决_UITextContainerView布局问题)...
- 第一:Python安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
- 【每日算法Day 65】你能顺利救出地下城里的公主吗?
- css 文字超出变 ... 点点点
- jquery左边滚动,完毕后跳转回来
- Mentor许可、许可分析、分析许可
- 联盟链之hyperledger-fabric
- web 计算器_计算器中的奢侈品——CASIO S200
- 系统集成方式:数据集成、控制集成
- 华东师范大学计算机模拟试题,华东师范大学计算机机试真题
- 服务器文件变更监控,监控文件夹变化并ftp到服务器
- cas55266-17-6四羧基苯基卟啉铁简称TCPP-Fe(3+)齐岳定制β-硝基-5, 10,15, 20-四苯基卟啉镍[NiTPP(NO2)]供应卟啉定制产品
- (每日一练c语言)写入字符串到文件txt
- php中的echo单引号_PHP echo用法详解