2013-02-08 98 views
5

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

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

预先感谢您

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 
} 
+1

书面,你的问题是非常不清楚。你想从ZIP中提取文件吗?你想解决什么*特定问题? – parsifal 2013-02-08 18:32:50

+0

通过这种方式:导航Sytems以同样的方式做到这一点,它们将数字道路地图数据保存在主内存中,并根据需要解压缩部分。 – AlexWien 2013-02-08 18:47:58

回答

5

你的想法是读取压缩文件,因为它是一个字节数组,并将其存储在一个变量。 后来,当你需要的zip您提取它的需求,节省内存:

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

如果你的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); 

现在你的邮编文件存储在变量zipFileBytes中,仍然以压缩形式存在。

然后,当你需要提取一些使用

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

试试这个:

 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); 

     } 

例如,如果该文件包含文本,你想打印它作为一个字符串,可以像这样读取InputStream:Read/convert an InputStream to a String

2

我认为在你的情况下,zipfile是一个容器,它可以容纳许多文件(并因此强制你导航每当你打开它的时候,都会将这个文件包含在正确的文件夹中),因为你声明每个zip文件只包含一个文本文件。也许只是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")); 
+0

这不是答案,他希望压缩形式的压缩文件在变量中。 Quote:我不想在磁盘上解压缩文件,然后读取其数据 – AlexWien 2013-02-08 18:45:42

+0

@AlexWien它不,它只是允许读取内容(逐字节或逐行显示)**没有立即扩展**整个文件,这是我的理解,这是OP之后。我只想指出一个压缩文件比压缩​​文件更易于使用的替代方法。将压缩文件存储在变量imo中没有实际应用。 – fvu 2013-02-08 18:52:56

+0

它不清楚,他想要什么,也许他想要你的解决方案是什么,解压缩在磁盘上创建一个新的文件。它并不总是愚蠢的,以保持一个zip文件的可变性:从字节数组解压缩比从文件读取更快的方式:想象一下你必须解压缩100秒,你不能用磁盘存取,在ebedded设备上低缓存。有很多应用:例如地图匹配系统,它计算车辆在两个大国驾驶的轨迹:从磁盘读取将减慢 – AlexWien 2013-02-08 18:57:48

相关问题