如何在不提取java的情况下读取Zipped文件的内容

我的文件名为ex.zip 。 在这个例子中,Zip文件只包含一个具有相同名称的文件(即“ex.txt”),这个文件非常大。 我不想每次都提取zip文件。因此我需要在不解压缩zip文件的情况下读取文件的内容(ex.txt)。 我尝试了一些类似下面的代码但是我只能读取变量中文件的名称。

如何读取文件的内容并将其存储在变量中?

先感谢您

 fis=new FileInputStream("C:/Documents and Settings/satheesh/Desktop/ex.zip"); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); ZipEntry entry; while((entry = zis.getNextEntry()) != null) { i=i+1; System.out.println(entry); System.out.println(i); //read from zis until available } 

尝试这个:

  ZipFile fis = new ZipFile("ex.zip"); int i = 0; for (Enumeration e = zip.entries(); e.hasMoreElements();) { ZipEntry entry = (ZipEntry) e.nextElement(); System.out.println(entry); System.out.println(i); InputStream in = fis.getInputStream(entry); } 

例如,如果文件包含文本,并且您想要将其作为String打印,则可以像这样读取InputStream: 将InputStream读取/转换为String

您的想法是将zip文件读入字节数组并将其存储在变量中。 稍后当您需要zip时,可以根据需要提取它,从而节省内存:

首先在字节数组zipFileBytes中读取Zip文件的内容

如果你有Java 1.7:

 Path path = Paths.get("path/to/file"); byte[] zipFileBytes= Files.readAllBytes(path); 

否则使用Appache.commons lib

 byte[] zipFileBytes; zipFileBytes = IOUtils.toByteArray(InputStream input); 

现在你的Zip文件存储在变量zipFileBytes中,仍然是压缩forms。

然后当你需要提取一些东西时使用

 ByteArrayInputStream bis = new ByteArrayInputStream(zipFileBytes)); ZipInputStream zis = new ZipInputStream(bis); 

我认为在你的情况下,zipfile是一个可以容纳许多文件的容器(因此每次打开它时强制你导航到正确包含的文件)的事实会使事情变得非常复杂,因为你声明每个zipfile只包含一个文本文件。 也许只是gzip文本文件(gzip不是容器,只是数据的压缩版本)要容易得多。 它使用起来非常简单:

 GZIPInputStream gis = new GZIPInputStream(new FileInputStream("file.txt.gz")); // and a BufferedReader on top to comfortably read the file BufferedReader in = new BufferedReader(new InputStreamReader(gis) ); 

制作它们同样简单:

 GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream("file.txt.gz"));