xinye_bao
2009-11-30 11:51
浏览 306
已采纳

java 解压 zip文件的问题

项目中遇到问题,所以请各位帮忙。

目前通过webservice传过来一个zip文件的字节流(),需要解压后得到文件内容(转成字符串就可以)。
我在网上查了一下ZIP解压的资料,java提供的方法只能解压磁盘上的文件,没有提供解压字节流的方法,
目前只能通过将zip文件字节流保存成本地zip文件,之后读取本地ZIP文件解压后保存到本地,再读取本地解压后的文件得到内容。

其实上面的过程中,保存到本地的过程是多余的,请问有没有什么办法实现处理在内存中完成,即ZIP字节流直接在内存中解压后得到文件内容。谢谢!

[b]问题补充:[/b]
回复moshalanye:
我已经把压缩的输入流转成了ZipInputStream,可是里面的内容怎么取出来啊。
ZipInputStream没有提供取出解压后的流的方法啊。
[b]问题补充:[/b]
问题解决了,果然ZipInputStream的read(byte[] b, int off, int len) 方法就可以了。谢谢!
ZipInputStream zis = new ZipInputStream (new ByteArrayInputStream(zippedByte));
ZipEntry entry;
if ((entry = zis.getNextEntry()) != null) {
int count;
byte data[]=new byte[BUFFER];
while ((count = zis.read(data))!= -1) {
//对Data的操作
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 宁静-夏天 2009-12-01 08:37
    已采纳

    那你是java.util.zip.ZipInputStream的API不熟悉了,
    你去看下getNextEntry()方法的解释

    zipInputStream 因为是针对压缩包,
    包中不一定只有一个文件,不能按照一般的inputStream去直接使用的

    ZipInputStream zis =初始化;
    ZipEntry entry;
    while ((entry = zis.getNextEntry()) != null) {
    把zis当作一个文件的inputStream直接使用,
    一个文件一个entry.
    }

    点赞 评论
  • wanghaolovezlq 2009-11-30 11:55

    你用ant的zip包应该可以处理

    点赞 评论
  • andilyliao 2009-11-30 12:38

    客户端有zip的方法 用它的unzip方法不就好了

    点赞 评论
  • xkuff 2009-11-30 14:43

    你这个问题我也有遇到过,当时我的想法是把byte[]直接转换成File对象,然后通过ZipFile对象把zip中的文件解压出来。但是这个想法是不能实现的,就算可以实现,你要想想把一个文件存放在内存里处理,文件较大的时候就会出现内存溢出的异常。
    我的建议是:在你现有的基础上,把解压后的zip文件删除就可以了。

    点赞 评论
  • 宁静-夏天 2009-11-30 15:29

    jdk中的java.util.zip.ZipInputStream
    初始化方法
    [code="java"]
    public ZipInputStream(InputStream in) {...}
    [/code]
    ZipInputStream有基于流的初始化方法,
    你的问题应该是可以通过使用它来解决吧,
    如果存在中文问题,还可以使用org实现的ZIP的API

    点赞 评论
  • 宁静-夏天 2009-11-30 15:31

    你的需求是基于流的操作,
    不需要将文件存储下来,
    也不用担心内存问题

    点赞 评论

相关推荐 更多相似问题