文档章节

关于java自带的ZipInputStream解析zip里面包含中文的问题

吕兵阳
 吕兵阳
发布于 2016/03/29 20:02
字数 265
阅读 1759
收藏 3

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

今天,要做支付宝对账,是从支付宝提供的sftp地址上面,读取支付宝生成的zip对账文件进行读取里面的文件,但是后来发现用zipInputStream读取的时候,一直报错java.lang.IllegalArgumentException这个异常。后来经过debug发现,ZipEntry竟然为空。最终网上搜了下资料,说是用ant.jar来解决,特此在这里记录下解决问题的过程:

方法一:使用ant.jar

  1. 首先加入ant的pom

<dependency>
  <groupId>org.apache.ant</groupId>
  <artifactId>ant</artifactId>
  <version>1.9.6</version>
</dependency>

然后写个测试类:

@org.junit.Test
public void test2() throws IOException {
    ZipFile zip = new ZipFile(new File("D:/2088011445567254-20160114.zip"),"GBK");
    Enumeration<org.apache.tools.zip.ZipEntry> enumeration =  zip.getEntries();
    while (enumeration.hasMoreElements()) {
        org.apache.tools.zip.ZipEntry zipEntry = enumeration.nextElement();
        System.out.println(zipEntry.getName());
    }
}

控制台正常的解析出结果:

方法二:使用commons-compress.jar

加入pom依赖

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-compress</artifactId>
  <version>1.10</version>
</dependency>

方法:

@org.junit.Test
public void test2() throws IOException {
    ZipArchiveInputStream zipArchiveInputStream = new ZipArchiveInputStream(new FileInputStream(new File("D:/2088011445567254-20160114.zip")),"gbk");
    ZipArchiveEntry zipArchiveEntry = null;
    while ((zipArchiveEntry = zipArchiveInputStream.getNextZipEntry()) != null) {
        System.out.println(zipArchiveEntry.getName());
    }

结果:

© 著作权归作者所有

吕兵阳
粉丝 95
博文 276
码字总数 105376
作品 0
郑州
后端工程师
私信 提问
加载中

评论(4)

吕兵阳
吕兵阳 博主

引用来自“FaderWang”的评论

你是把对账文件下载先来再读取,还是直接在内存中读取?
直接内存
FaderWang
FaderWang
你是把对账文件下载先来再读取,还是直接在内存中读取?
吕兵阳
吕兵阳 博主

引用来自“zzuqiang”的评论

把支付宝的对账的思路和实现也分享一下吧! 12 13
zzuqiang
zzuqiang
把支付宝的对账的思路和实现也分享一下吧! 12 13
使用ubuntu 10.04中的中文乱码问题解决

1、ibus输入法 Ubuntu 系统安装后已经自带了ibus输入法,在英语环境下默认不启动。 配置ibus自动启动可以在ubuntu系统菜单上选择System --- Preferences --- Startup Applications,在该窗口...

durban
2012/08/25
204
0
ftserver 0.3 发布,全文搜索,可搜中文意境句子

ftserver是一个使用英文规则处理英文,使用中文规则处理中文的全文搜索服务器,不需要切割中文为单词,可以支持中文字的任意排列,轻松处理古诗词,写意句子不影响搜索,不依赖词库。 使用独...

iBoxDB
2016/02/16
1K
4
细说 Java 中的字符和字符串( 一 )

原文出处:BuquTianya 一道经典问题 Java里的char类型能不能存储一个中文字符? 对于这道题,绝大多数的答案都是“可以存储”。给出的原因包括: 1. java中的char是unicode存储,unicode编码...

BuquTianya
2018/06/30
0
0
Discuz! Ucenter API for JAVA

Discuz! Ucenter API for JAVA 使用自己的项目于discuz联合登陆注册。 https://pan.baidu.com/s/1Wny6jNvvzCNvOPR0Oxe39Q 测试代码和源码都在这里。 源码和jar文件都在http://code.google.co...

小帅帅丶
2014/06/16
670
9
阿里java开发规约的Idea插件安装(英文)

Idea Plugin Prepare Project JDK: 1.7+ Gradle: 3.0+(Require JDK1.8+ for gradle) Build Run plugin Use p3c-common as your plugin dependency compile 'com.alibaba.p3c.idea:p3c-comm......

Airship
06/25
98
0

没有更多内容

加载失败,请刷新页面

加载更多

超过了最大请求长度。

尝试在网站上上传视频时,出现错误“ 最大请求长度超出” 。 我该如何解决? #1楼 我认为这里没有提到它,但是要使其正常工作,我必须在web.config中提供以下两个值: 在system.web <httpRun...

javail
12分钟前
3
0
宝塔好用吗?

不少新手站长对服务器运维知识不擅长,不知道怎样管理好云服务器。如果有一个简单易用的面板,站长们就不需要去学习运维技巧,把这些就交给后端工程师就好。 宝塔算是目前市面上使用用户较多...

BirdCloud
18分钟前
3
0
第二代网关GateWay搭建流程

Spring Cloud第二代网关GateWay是由纯Netty开发,底层为Reactor,WebFlux构建,不依赖任何Servlet容器,它不同于Zuul,使用的是异步IO,性能较Zuul提升1.6倍。搭建过程如下(本次搭建的为子项目...

算法之名
21分钟前
13
0
Drools规则引擎详解-常用的drl实例

package droolsDemo//说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致,//主要用于可以根据kmodule.xml中不同的package属性来指定加载...

蜗牛伊
23分钟前
5
0
如何在Android Studio中“选择Android SDK”?

将Eclipse-Android-Project成功导入“ Android Studio 1.4”后,出现错误 “请选择Android SDK” 当我单击该按钮以在模拟器中运行该应用程序时,但找不到任何方法。 当我单击“运行”时,此对...

技术盛宴
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部