背景

开发中解压缩和压缩文件的处理是很常遇到的情况。这几天做一个对账的功能的时候,遇到过一个解压gzip压缩文件,报错:Not in GZIP format 的异常问题。组内咨询了其他同事,网上找遍了各种解决方案,

最后因为对方上传压缩文件的时候,把原始zip格式改为gzip格式了。导致怎么解压都是没法解决,把问题解决过程重新梳理一遍,也供同样遇到此类问题的你们一个参考。

过程

简单把我们自己解压方认为是A,FTP服务器称为是B,对方上传文件方称为C。C从第三方平台下载的原始压缩文件格式为:ZIP格式,C上传到FTP服务器B上时的格式为GZIP。压缩文件中的附件表格格式为csv,可以用Excel打开,也可以用文本打开。

我方去FTP上下载下来后,解压缩文件的时候,一直报错如下:

字面意思理解非常简单:不是GZIP格式的文件,但是由于太过相信和依赖C方,一直在寻找本身程序的问题,尝试了网上各种解压GZIP文件的方法,都是于事无补。

解决

让对方C把压缩文件还原成原始格式ZIP文件后,解压正常。问题得到解决。

顺便贴一下解压代码

1、解压缩文件

         ZipFile zip = new ZipFile(new File(fileName), Charset.forName("GBK"));//解决中文文件夹乱码InputStream  zipInputStream =  null;for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();){ZipEntry entry = entries.nextElement();String zipEntryName = entry.getName();if(StringUtils.isNotEmpty(zipEntryName) && !zipEntryName.contains("汇总")){zipInputStream = zip.getInputStream(entry);}}
ZipFile zip = new ZipFile(new File(fileName), Charset.forName("GBK")); 有效解决中文乱码问题,以原始文件的编码为准。这里是 GBK
ZipEntry entry = entries.nextElement();  为得到下解压文件中的下一个附件文件流,通常附件格式:xls、xlsx、csv、txt等。
String zipEntryName = entry.getName();   当压缩文件中,含有多个附件文件的时候,需要得到某个具体文件名的文件。

2、解析附件

    BufferedReader reader = new BufferedReader(new InputStreamReader(zipIn,"GBK"), inputStreamCache);CSVReader csvReader = new CSVReader(reader, ',');String[] record = null;if((record = csvReader.readNext()) != null ){System.out.println(record[0]);System.out.println(record[1]);System.out.println(record[2]);System.out.println(record[3]);...}
BufferedReader 读取文件流,这里的 new InputStreamReader(zipIn,"GBK") 编码格式保持跟前面一致,才不会乱码。 
CSVReader csvReader = new CSVReader(reader, ',');  以csv格式解析文件并读取数据。

最后循环遍历附件表格的数据,String[] record 代表表格中数据的行记录数组,每一行又以表格的列数读取具体数据值:record[0]、record[1]、record[2]...

业务逻辑自己封装处理即可。

Not in GZIP format异常相关推荐

  1. [Issue Fixed]-分卷压缩解压:gzip: stdin: not in gzip format

    在解压一份MTK厂商给的code时,发现怎么都解压不了 test@test-pc:~/workspace/program/mtk-q$ tar xvzf ALPS-MP-Q0.MP1-V4.4.PRE ...

  2. Vue开启Gzip打包异常:webpack打包报错Cannot read property ‘emit‘ of undefined

    Vue开启Gzip打包异常:webpack打包报错Cannot read property 'emit' of undefined 相关代码 const CompressionPlugin = req ...

  3. tar解压失败:gzip: stdin: not in gzip format

    使用tar -zxvf 命令解压备份FMIS2600DMP.tar.gz报错 [root@Gris-11140 FMIS2600bak]# tar -zxvf /home/oradata/FMIS26 ...

  4. 解决Linux上解压tar.gz文件报错 (gzip: stdin: not in gzip format)

    输入 #tar -xvf jdk-8u131-linux-x64.tar.gz,执行命令后报错如下: gzip: stdin: not in gzip format  tar: Child retur ...

  5. tar命令解压jdk.tar.gz包 报错 gzip: stdin: not in gzip format

    转自:https://blog.csdn.net/LL_zhuo/article/details/44173355 遇到和这篇博文一样的问题了.用wget 从oracle官网下载jdk, http:/ ...

  6. 【Linux】解决Linux上解压jdk报错gzip: stdin: not in gzip format

    最近在阿里上买了个服务器玩,需要安装jdk,在解压过程中遇到了一些问题,又是一番Google度娘,终于解决了.问题原因让我有点无奈-- 输入 #tar -xvf jdk-8u131-linux-x64 ...

  7. gzip: stdin: not in gzip format / tar: Child returned status 1

    问题描述:解压文件时候报错: gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recove ...

  8. tar解压tgz文件出现gzip: stdin: not in gzip format报错问题

    表明不需要添加z参数 tar -zxcf xxx.tgz gzip: stdin: not in gzip format tar -xcf xxx.tgz #success

  9. Linux解压tar.gz文件时提示gzip: stdin: not in gzip format tar: Child returned status 1 tar:

    在Linux系统下解压缩tar.gz文件命令文件的时候,提示gzip: stdin: not in gzip format tar: Child returned status 1 tar 在解压ta ...

最新文章

  1. windows mobile设置插移动卡没反应_ipad pro外接移动硬盘ipados
  2. JBoss vs. Tomcat
  3. ECCV2020 收录论文汇总(持续更新中)附打包下载
  4. 你真的会读datasheet吗?
  5. 线框图用什么软件_为什么要在线框中着色?
  6. strictmath_Java StrictMath nextAfter()方法与示例
  7. JAVA EE配TOMCAT
  8. Halcon 测量直线和圆环的线宽
  9. 航拍+AI︱极简的视频风格迁移体验
  10. Oralce UTL_SMTP发送邮件的发送时间处理
  11. Linux 磁带机型号,请教一下,爱华的磁带机型号大全,里面的字母什么意思?
  12. CBv92_GSHI 使用技巧、电脑输CBC码、金手指分区数据复制和备份
  13. VMWare安装配置Win7详解
  14. eslint 修改standard规则
  15. HTML(第九章) 标签: 网页动画
  16. Linux软件安装管理的三种方式——源码安装/deb/rpm/yum/apt
  17. 使用Jcom组件操作Visio批量导出图片
  18. createTrackbar滑条函数
  19. Python爬虫入门教程 98-100 帮粉丝写 Python 爬虫之【2020秋季最难的事--约不上的疫苗】
  20. 浅析网购中的客户对商品的评论

热门文章

  1. 吸顶灯怎么固定天花板_客厅里的那种大的吸顶灯玻璃怎么往天花板上固定结实!因为灯外面全是玻璃的所以要牢...
  2. MapObject 控件的使用之加入图层(作者/张松伟)
  3. 牛客网输入输出(Java)总结
  4. CSDN实训 - 通过Java修改游戏存档
  5. iPhone 11全系涨价
  6. AcWing 238. 银河英雄传说(C++)
  7. Button(按钮)与ImageButton(图像按钮)
  8. 路由器的基本配置和Talent配置
  9. 福卡红包V3.0.1全开源解密版
  10. 40亿个整数,求上中位数