如何在Java中从ZIP文件获取压缩文件数据?

如何在Java中从ZIP文件获取压缩文件数据?,java,zip,Java,Zip,使用java.util.zip,我可以访问未压缩的文件(这是正常的预期行为)。我还可以访问每个文件的元数据(通过java.util.zip.ZipFile)是否有办法在zip中实际获取文件的压缩数据(字节流),也就是说,在java解压缩之前?类似地,是否有针对Java的低级ZIP操作的库 编辑:显然,我可以通过读取ZIP文件作为字节流并解释整个文件来完成这项工作,但这将涉及ZIP文件的大量复杂问题。本质上,这意味着从头开始创建一个库来读取/处理zip文件。我不想那样。zip文件不是文件夹。它只是

使用
java.util.zip
,我可以访问未压缩的文件(这是正常的预期行为)。我还可以访问每个文件的元数据(通过
java.util.zip.ZipFile
)是否有办法在zip中实际获取文件的压缩数据(字节流),也就是说,在java解压缩之前?类似地,是否有针对Java的低级ZIP操作的库


编辑:显然,我可以通过读取ZIP文件作为字节流并解释整个文件来完成这项工作,但这将涉及ZIP文件的大量复杂问题。本质上,这意味着从头开始创建一个库来读取/处理zip文件。我不想那样。

zip文件不是文件夹。它只是一个文件,其中包含每个压缩文件的元数据。元数据本身在压缩上下文之外没有任何意义。@SotiriosDelimanolis我同意。尽管如此,我仍然可以使用枚举器遍历zip文件,并得到
java.util.zip.ZipEntry
,对吗?我可以在此基础上调用
getName()
或get
getTime()
等方法。类似地,通过将giving this
ZipEntry
作为
java.util.zip.ZipFile.getInputStream()
的参数,我将获得未压缩数据的输入流。我想要的不是未压缩的数据,而是压缩后的数据,就像它存在于原始Zip文件中一样。压缩只是获取字节内容并使其变小。单独使用时,您将丢失文件名、文件时间、权限等。。所有这些信息都以元数据的形式存储在ZipEntry中(您必须查看zip算法)。但是zip条目不是一个可以打开
InputStream
的文件。如果你真的想压缩数据,你需要阅读ZIP算法,了解它是如何管理的,头中的字节位置,标志等。然后自己解析ZIP文件我完全同意,我们在同一页=)我也需要元数据,但我也需要压缩数据(正如在原始ZIP文件中显示的那样,在用Java解压之前)@我相信是的;我将独自解码整个文件。实际上,可以通过更改Java标准库代码中的一行代码来实现。