# Inhalt einer zip-Datei anzeigen



## Schaaaf (21. Jul 2010)

Hallo,

Ich habe eine zip-Datei gedownloaded und wolle nun wissen, welche Dateien darin enthalten sind.
Kann mir jemand sagen, mit welchen Befehl ich den Inhalt einer zip-Datei anzeigen lassen kann? 

Danke schon mal..


----------



## fastjack (21. Jul 2010)

Compressing and Decompressing Data Using Java


----------



## Schaaaf (22. Jul 2010)

Okay. Das hilft mir allgemein ersteinmal weiter. Dann scheint es an der Datei zu liegen. Ich habe nämlich folgenden Fehlermeldung :

java.util.zip.ZipException: error in opening zip file
	at java.util.zip.ZipFile.open(Native Method)
	at java.util.zip.ZipFile.<init>(Unknown Source)
	at java.util.zip.ZipFile.<init>(Unknown Source)
	at UnZip2.main(UnZip2.java:13)

Kann ich da etwas machen, damit ich die Datei trotzdem verwenden kann?


----------



## Final_Striker (22. Jul 2010)

Schon mal mit einer anderen zip Datei ausprobiert?


----------



## Schaaaf (22. Jul 2010)

Natürlich, sonst wüsste ich ja nicht, dass es an meiner Datei liegt.


----------



## nrg (22. Jul 2010)

zeig mal deinen code dazu


----------



## Schaaaf (22. Jul 2010)

```
try
       {
         System.out.println("Example of ZIP file decompression.");

         // Specify file to decompress
         String inFileName = "C:/Daten/test32.zip";
         // Specify destination where file will be unzipped
         String destinationDirectory = "C:/Daten/";

         File sourceZipFile = new File(inFileName);
         File unzipDestinationDirectory = new File(destinationDirectory);

         // Open Zip file for reading
         ZipFile zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ);

         // Create an enumeration of the entries in the zip file
         Enumeration zipFileEntries = zipFile.entries();

         // Process each entry
         while (zipFileEntries.hasMoreElements())
         {
           // grab a zip file entry
           ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();

           String currentEntry = entry.getName();
           System.out.println("Extracting: " + entry);

           File destFile =
             new File(unzipDestinationDirectory, currentEntry);

           // grab file's parent directory structure
           File destinationParent = destFile.getParentFile();

           // create the parent directory structure if needed
           destinationParent.mkdirs();

           // extract file if not a directory
           if (!entry.isDirectory())
           {
             BufferedInputStream is =
               new BufferedInputStream(zipFile.getInputStream(entry));
             int currentByte;
             // establish buffer for writing file
             byte data[] = new byte[BUFFER];

             // write the current file to disk
             FileOutputStream fos = new FileOutputStream(destFile);
             BufferedOutputStream dest =
             new BufferedOutputStream(fos, BUFFER);

             // read and write until last byte is encountered
             while ((currentByte = is.read(data, 0, BUFFER)) != -1)
             {
               dest.write(data, 0, currentByte);
             }
             dest.flush();
             dest.close();
             is.close();
           }
         }
         zipFile.close();
       }
       catch (IOException ioe)
       {
       ioe.printStackTrace();
       }
```

Das ist der zip-Teil. Wie gesagt, mit anderen zip-Files funktioniert es, aber nicht mit meinen. 
Da fällt mir grad auch auf, dass die Endung von meinen Datein *.gz ist. Macht das einen Unterschied im Handling?


----------



## Gastredner (22. Jul 2010)

GNU Zip != Zip.
Java bietet einen GZIPInputStream bzw. GZIPOutputStream. Mehr zu dem Thema - inklusive Beispiele - findet du in der Insel: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.10 Datenkompression


----------



## XHelp (22. Jul 2010)

Ja, es ist eine gzip Datei und sind Unterschiede


----------



## Schaaaf (22. Jul 2010)

Könnte sonst jemand mal meinen kompletten Code testen? Ich geb mal die URL mit. Wäre echt lieb.


```
import java.awt.Desktop;
import java.io.*;
import java.net.URL;
import java.util.Enumeration;
import java.util.zip.GZIPInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;  
import java.util.zip.ZipInputStream;

import javax.swing.JOptionPane;

//import javax.swing.JOptionPane;


class Test{
    private static final int BUFFER = 2048;

	public static void main (String[] args) throws Exception { 
			//////Datensatz von URL laden/////
       String datensatz = "GDS100";
       String seitenurl = "ftp.ncbi.nih.gov/pub/geo/DATA/SOFT/GDS/"+datensatz+".soft.gz";
       //Datensatz downloaden
       URL neturl = new URL("ftp://"+seitenurl); 
       InputStream in = neturl.openConnection().getInputStream(); 
       		/////Datensatz speichern/////
       // Lokaler Pfad des Datensatzes
       String localurl = "C:"+File.separator+"Daten"+File.separator+datensatz+".gz";
       //Fileobjekt mit dem Pfad erzeugen und dort den Datensatz speichern
       OutputStream out = new FileOutputStream(new File(localurl));
       byte[] buffer = new byte[1024]; 
       for (int n;(n = in.read(buffer)) != -1; out.write(buffer, 0, n));
        
       in.close(); 
       out.close();
       
       		/////Datensatz entpacken/////
       try
       {
         System.out.println("Example of ZIP file decompression.");

         // Specify file to decompress
         String inFileName = "C:/Daten/GDS100.soft.gz";
         // Specify destination where file will be unzipped
         String destinationDirectory = "C:/Daten/";

         File sourceZipFile = new File(inFileName);
         File unzipDestinationDirectory = new File(destinationDirectory);

         // Open Zip file for reading
         ZipFile zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ);

         // Create an enumeration of the entries in the zip file
         Enumeration zipFileEntries = zipFile.entries();

         // Process each entry
         while (zipFileEntries.hasMoreElements())
         {
           // grab a zip file entry
           ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();

           String currentEntry = entry.getName();
           System.out.println("Extracting: " + entry);

           File destFile =
             new File(unzipDestinationDirectory, currentEntry);

           // grab file's parent directory structure
           File destinationParent = destFile.getParentFile();

           // create the parent directory structure if needed
           destinationParent.mkdirs();

           // extract file if not a directory
           if (!entry.isDirectory())
           {
             BufferedInputStream is =
               new BufferedInputStream(zipFile.getInputStream(entry));
             int currentByte;
             // establish buffer for writing file
             byte data[] = new byte[BUFFER];

             // write the current file to disk
             FileOutputStream fos = new FileOutputStream(destFile);
             BufferedOutputStream dest =
             new BufferedOutputStream(fos, BUFFER);

             // read and write until last byte is encountered
             while ((currentByte = is.read(data, 0, BUFFER)) != -1)
             {
               dest.write(data, 0, currentByte);
             }
             dest.flush();
             dest.close();
             is.close();
           }
         }
         zipFile.close();
       }
       catch (IOException ioe)
       {
       ioe.printStackTrace();
       }
     }
}
```


----------



## XHelp (22. Jul 2010)

- warum kannst du es selber nicht testen?
- so wie es aussieht ist dein Programm immer noch für zip ausgelegt.


----------



## Gastredner (22. Jul 2010)

Was sollte man da testen? Mit GZIP-Dateien kann dieser Code einfach nicht umgehen, was auch deutlich aus dem verlinkten Abschnitt der Insel klar geworden sein sollte: GZIP unterstützt das Komprimieren mehrerer Dateien nicht, weshalb man GZIP-Dateien nicht mit ZipFile und ZipEntry auslesen kann. Der Insel-Abschnitt enhält auch ein komplettes Beispiel zum Entpacken von GZIP-Archiven, anhand dessen es ein Einfaches sein sollte, deinen Code passend umzuschreiben.


----------

