2012-04-10 7 views
0

Ich schrieb einen Code mit ZipInputStream, aber es ist etwas falsch damit.Der ZipInputStream kann nicht alle Informationen der Zip-Datei lesen

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

Es gibt 3 Textdateien in der testzip.zip. Das heißt, die richtige Ausgabe sollte die drei Dateinamen und deren Inhalt sein. Meine Ausgabe sind jedoch 3 Dateinamen und 2 ihrer Inhalte. Warum nur 2 Inhalte, anstatt 3?

+0

Danke @ Andrew Thompson –

+0

Sie sind vielleicht kein englischer Muttersprachler, aber es ist wichtig, den Unterschied zwischen "lesen" und "schreiben" zu verstehen. (Es ist nicht möglich, in einen Eingabestream zu schreiben, sondern nur daraus zu lesen.) 2) Bitte nehmen Sie mehr Sorgfalt beim Schreiben von Beiträgen auf, verwenden Sie den Code-Formatierungsknopf am oberen Rand des Nachrichten-Eingabe-/Bearbeitungsformulars und lassen Sie überflüssige Leerzeilen aus Codebuchungen. - Und willkommen in SO! –

+0

Gern geschehen für die Bearbeitung und alle Tipps, die ich zur Verfügung stellen kann. :) –

Antwort

2

Ich machte eine Zip mit 3 Textdateien in; Die Tatsache, dass es sich um Textdateien handelt, ist wichtig, damit der folgende Code funktioniert. Ich lese alle Einträge und schreiben es die Namen und Inhalte:

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

Ich habe es versucht, aber die gleiche output.thank Sie –

+0

sind Sie sicher, dass die dritte Datei nicht leer ist? – Tom

+0

yeah .I'sure.I überprüfen Sie die ZIP-Datei mehr als 5 mal –

0

Für diesen Anwendungsfall, wie es scheint, ZipFile könnte besser geeignet sein, da, dass Sie die TOC der Zip-Datei geben kann.

+0

Es tut mir leid. Was bedeutet TOC? –

+0

Inhaltsverzeichnis – Tom