Not in GZIP format异常

╰半夏微凉° 2022-12-28 00:37 303阅读 0赞

背景

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

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

过程

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ZvbGxvd18yNA_size_16_color_FFFFFF_t_70

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

解决

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

顺便贴一下解压代码

1、解压缩文件

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

2、解析附件

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Not in GZIP format异常

    背景 开发中解压缩和压缩文件的处理是很常遇到的情况。这几天做一个对账的功能的时候,遇到过一个解压gzip压缩文件,报错:Not in GZIP format 的异常问题。