2012-04-10 43 views
0

我使用ZipInputStream编写了一些代码,但它有问题。ZipInputStream无法读取zip文件的所有信息

ZipInputStream zin=null; 
zin=new ZipInputStream(new BufferedInputStream(
    new FileInputStream("e:/testzip.zip"))); 
ZipEntry ze; 
while((ze=zin.getNextEntry())!=null) { 

    System.out.println("readfile"+ze.getName()); 

    int c=0; 

    while((c=zin.read())>0) { 
     System.out.write(c); 
    } 
} 
zin.close(); 

testzip.zip有3个文本文件。也就是说,正确的输出应该是三个文件名及其内容。但是,我的输出是3个文件名和2个内容。为什么只有2个内容,而不是3个?

+0

谢谢你@安德鲁汤普森 – 2012-04-10 10:11:31

+0

你可能不是英语的母语,但了解'阅读'和'写'之间的区别很重要。 (无法写入输入流,只能从中读取。)2)请小心输入文章,使用信息发布/编辑表单顶部的代码格式化按钮,并从中删除无关的空白行代码发布。 - 欢迎来到SO! – 2012-04-10 10:13:37

+0

欢迎您提供编辑和我可以提供的任何提示。 :) – 2012-04-10 10:14:22

回答

2

我在3个文本文件中做了一个zip文件;他们是文本文件的事实对于下面的代码工作很重要。我读了所有条目,并写出它的名称和内容:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Enumeration; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     ZipFile zipFile = new ZipFile("D:\\zip.zip"); 
     Enumeration<? extends ZipEntry> entries = zipFile.entries(); 
     while(entries.hasMoreElements()) { 
      ZipEntry zipEntry = entries.nextElement(); 
      System.out.println(zipEntry.getName()); 
      BufferedReader bufferedeReader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry))); 
      String line = bufferedeReader.readLine(); 
      while(line != null) { 
       System.out.println(line); 
       line = bufferedeReader.readLine(); 
      } 
      bufferedeReader.close(); 
     } 
     zipFile.close(); 
    } 

} 
+0

我已经试过了,但输出相同。感谢你 – 2012-04-10 09:57:17

+0

你确定第三个文件不是空的吗? – Tom 2012-04-10 10:00:02

+0

是的。我确认。我检查zip文件超过5次 – 2012-04-10 10:02:04

0

对于这种使用情况下,它似乎像ZipFile可能更合适,因为这可以给你的zip文件的TOC。

+0

对不起,TOC是什么意思? – 2012-04-10 10:17:26

+0

目录 – Tom 2012-04-10 11:16:35

相关问题