Not in GZIP format异常

背景

开发中解压缩和压缩文件的处理是很常遇到的情况。这几天做一个对账的功能的时候,遇到过一个解压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]...

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序大视界

原创不易,请给点支持和鼓励吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值