2012-04-10 125 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