JAVA 多层zip压缩包里文件的读取

问题描述

一个文件在两个压缩包下面怎么读取啊?如:E:\001.zip\111.zip,001压缩包里有一个111压缩包,不解压读取111压缩包的里文件,能读取里面的文件名就行,求大神帮忙!谢谢!

解决方案

解决方案二:
以前一个存档的bug讨论中提到,JRE不支持这种操作,因为读取一个zip文件有随机访问的要求(不是流式文件访问),在嵌入式的流中做不到随机访问,因此不支持,需要我们明确地解压到临时文件中或内存中。https://community.oracle.com/thread/2265518?start=0&tstart=0
解决方案三:
ZIP文件压缩时,需要有一部分关于文件信息的头和它的内容开始处所在的偏移量及内容长度的记录在前面,访问中需要随机访问(类似RandomAccessFile那种随时移动读取位置的指针,不是按顺序读取),就像我们在ZipFile介绍中先迭代找到ZipEntry然后对每一个ZipEntry去找到它的ZipFileInputStream一样,对于多数压缩文件格式都是这么做的,在某一部分记录着文件原始信息另一部分是内容,中间需要随机访问。比如WinRAR的固实压缩就是想办法把记录文件信息的地方紧凑地合并在一起,然后,把文件内容完全一个一个地接在一起合并压缩,因此它的压缩率更高,非常适合像打包Eclipse这种小文件个数非常多但大小都很小的文件(比如文件数量多的压缩都可以考虑WinRAR固实压缩,当然如果文件主要是JPG这种已经压缩的格式就不用再选择高压缩率的压缩方式了,因为大小跟不压缩没有什么分别),另外固实压缩的方式也决定了只要其中一个文件损坏整个文件中就没有一个能正常地还原出来(不像普通压缩某个文件坏了其它的部分还是可以还原的)。引用1楼humanity的回复:

以前一个存档的bug讨论中提到,JRE不支持这种操作,因为读取一个zip文件有随机访问的要求(不是流式文件访问),在嵌入式的流中做不到随机访问,因此不支持,需要我们明确地解压到临时文件中或内存中。https://community.oracle.com/thread/2265518?start=0&tstart=0

解决方案四:
谢谢您的回复,那么apache是不是有一个包可以实现这个功能啊?ant包引用2楼humanity的回复:

ZIP文件压缩时,需要有一部分关于文件信息的头和它的内容开始处所在的偏移量及内容长度的记录在前面,访问中需要随机访问(类似RandomAccessFile那种随时移动读取位置的指针,不是按顺序读取),就像我们在ZipFile介绍中先迭代找到ZipEntry然后对每一个ZipEntry去找到它的ZipFileInputStream一样,对于多数压缩文件格式都是这么做的,在某一部分记录着文件原始信息另一部分是内容,中间需要随机访问。比如WinRAR的固实压缩就是想办法把记录文件信息的地方紧凑地合并在一起,然后,把文件内容完全一个一个地接在一起合并压缩,因此它的压缩率更高,非常适合像打包Eclipse这种小文件个数非常多但大小都很小的文件(比如文件数量多的压缩都可以考虑WinRAR固实压缩,当然如果文件主要是JPG这种已经压缩的格式就不用再选择高压缩率的压缩方式了,因为大小跟不压缩没有什么分别),另外固实压缩的方式也决定了只要其中一个文件损坏整个文件中就没有一个能正常地还原出来(不像普通压缩某个文件坏了其它的部分还是可以还原的)。Quote: 引用1楼humanity的回复:
以前一个存档的bug讨论中提到,JRE不支持这种操作,因为读取一个zip文件有随机访问的要求(不是流式文件访问),在嵌入式的流中做不到随机访问,因此不支持,需要我们明确地解压到临时文件中或内存中。https://community.oracle.com/thread/2265518?start=0&tstart=0

解决方案五:
没听说,不清楚。如果它有这功能可能是自己实现的native方法,JRE自带的那个native的zip读写功能是不支持的。
解决方案六:
谢谢了引用4楼humanity的回复:

没听说,不清楚。如果它有这功能可能是自己实现的native方法,JRE自带的那个native的zip读写功能是不支持的。

时间: 2024-08-05 06:02:42

JAVA 多层zip压缩包里文件的读取的相关文章

java用Zip进行多文件保存

提供了Zip支持的Java 1.1库显得更加全面.利用它可以方便地保存多个文件.甚至有一个独立的类来简化对Zip文件的读操作.这个库采采用的是标准Zip格式,所以能与当前因特网上使用的大量压缩.解压工具很好地协作.下面这个例子采取了与前例相同的形式,但能根据我们需要控制任意数量的命令行参数.除此之外,它展示了如何用Checksum类来计算和校验文件的"校验和"(Checksum).可选用两种类型的Checksum:Adler32(速度要快一些)和CRC32(慢一些,但更准确).   /

Java解压缩zip - 解压缩多个文件或文件夹实例_java

Java解压缩zip - 多个文件(包括文件夹),具体如下: 对多个文件和文件夹进行压缩,对复杂的文件目录进行解压. 压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面... ZipFiles(zip,"abc",new File("d:/English"),new File("d:/发放数据.xls")); 测试文件目录结构: 测试的压缩内容:English文件夹和同级的两个excel文件 File[]

java-JAVA新手求救!从文件中读取出的歌词在TextArea中显示不全!

问题描述 JAVA新手求救!从文件中读取出的歌词在TextArea中显示不全! RT,最近在写一个简单的MP3播放器,由于是新手,所以代码比较屎,大神不要嘲笑.. 从文件中(.lrc格式)中读取出的歌词可以在控制台完美输出,但是在Textarea中 是残缺状态,想知道原因及解决办法 以下是读取歌词并显示的代码: int lastTime = 0; int minute, second, milliSecond, total; String str = "", time, words;

java.util.zip创建和读取zip文件的类

写了一个用java.util.zip创建和读取zip文件的类 跟大家分享一下 里面用了递归调用 呵呵 近期用了不少递归调用!有空总结一下! /** TestZip.java coding by Serol Luo. rollingpig@163.com 2003/07/03 http://www.chinaunix.net/forum/viewforum.php?f=26 转载请保留此信息 */ import java.util.*; import java.util.zip.*; import

使用java.util.zip实现文件压缩和解压

import java.io.*; import java.util.zip.*; /** *//** *功能:zip压缩.解压 *说明:本程序通过ZipOutputStream和ZipInputStream实现了zip压缩和解压功能. *问题:由于java.util.zip包并不支持汉字,当zip文件中有名字为中文的文件时 , author by http://www.bt285.cn http://www.5a520.cn * 就会出现异常:"Exception in thread &quo

解压zip压缩包中的指定文件(害死人的错误)

使用Java 解压zip压缩包中的指定文件时遇到了问题. 且听我细细道来: 主要方法如下: Java代码   public static byte[] getContent2(final ZipFile zipFile, final ZipEntry zipEntry)               throws IOException {           InputStream inputStream = zipFile.getInputStream(zipEntry);          

从Java的jar文件中读取数据的方法

  这篇文章主要介绍了从Java的jar文件中读取数据的方法,实例分析了java档案文件的相关操作技巧,需要的朋友可以参考下 本文实例讲述了从Java的jar文件中读取数据的方法.分享给大家供大家参考.具体如下: Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR 文件格式支持压缩.身份验证和版本,以及许多其它特性. 从 JAR 文件中得到它所包含

Linux下rar及zip压缩包中批量替换某文件脚本

本需求是自己负责的一个生产系统上,有大量以zip和rar结尾的压缩文件散落在文件系统的各个文件夹,先在需要把压缩包里包含某一个特定文件(如tftpd32.exe或Tftpd32.exe,版本较旧),全都替换成比较新的tftpd32.exe版本.压缩文件总数约5000个,需要替换的数量约1500个. 因为是生产环境,不敢轻易乱动,所以脚本考虑的因素就非常多,不允许中间执行过程出现异常,所以找到文件后实际执行替换操作之前做好备份,并且将操作过程记录日志. 以下几点需要考虑: 分别处理zip和rar文

技术-js可以可以直接读取zip压缩包中的内容吗?

问题描述 js可以可以直接读取zip压缩包中的内容吗? js可以可以直接读取zip压缩包中的内容吗? 如果可以,通过何种方式读取? 解决方案 js不能和本地文件系统交互,更不能读取zip中的内容. 解决方案二: 不能,你需要先在后台键zip或者rar压缩文件解压出来,如果是excel文档的话还要将excel文档解析完后再将数据传到前台页面中: 解压压缩包和解析excel文档的源码我上传(csdn)上去了,如果需要的话可以去下载下来就可以了. 解决方案三: js是不直接读取的,需要解压缩后再读取