Zip ist leer

Status
Nicht offen für weitere Antworten.
B

blume

Gast
Hallo zusammen!

Ich möchte einen Ordner mit nachstehendem Code zippen.
Allerdings ist das erstellte Zip-File leer.

Was hab ich falsch gemacht?

Vielen Dank!

blume

Code:
package mypackage9;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Class1 
{
  public Class1()
  {
  }
  
      //@param dir: Verzeichnis, das gezippt werden soll
    //@param zipFileName: Name der zu erstellenden Zip-Datei
    public static void createZipFile (String dir, String zipFileName) throws IOException
    {
        // Buffer zum Auslesen der Dateien.     
        byte[] buf = new byte[4096];      
        
        // Der vollständige Pfad zur zukünftigen Zip-Datei.     
        String dirFile = dir + zipFileName;      
        
        // Die XML-Dateien werden in diese Datei geschrieben.     
        ZipOutputStream zipOut =  new ZipOutputStream( new FileOutputStream(dirFile));      
        
        // Das Verzeichnis, dessen Dateien gesichert werden sollen.     
        File dirZip = new File(dir);      
        
        // Alle Dateinamen aus dem Verzeichnis werden in des Array eingelesen.     
        File [] fileArray = dirZip.listFiles();      
        String fileName = "";      
        
        // Alle Dateien auslesen.     
        for(int i = 0; i < fileArray.length; i++)     
        {       
            // Der Name der Datei wird ermittelt.       
            fileName = fileArray[i].getAbsolutePath(); 
            
            System.out.println(fileName);
            
            // Zip-Dateien ignorieren.       
            if (fileName.endsWith(".zip")) continue;        
            
            // Die Datei wird zum Lesen geöffnet.        
            FileInputStream inFile = new FileInputStream(fileName);        
            
            // Info an Zip-Datei: Jetzt kommt neuer Eintrag.       
            zipOut.putNextEntry(new ZipEntry(fileName));        
            int len;        
            
            // Der Inhalt der Datei wird in die Zip-Datei kopiert.       
            while ((len = inFile.read(buf)) > 0)        
            {         
                zipOut.write(buf, 0, len);       
            }        
            inFile.close();     
        }      
        
        // Die Zip-Datei ist erzeugt.     
        zipOut.close();    
    }
  
  public static void main(String[] args)
  {
    try{
      createZipFile("K:/Test/Ordner/","export.zip");
    }catch (Exception e)
    {
      e.printStackTrace();
    }
  }
}
 

kleiner_held

Top Contributor
Dein Code laeuft bei mir einwandfrei, habe nur Zeile 68 mit nem eigenen Pfad angepasst.

Edit: achso ich hab JDK 1.5 genommen, falls du ein aelteres JDK verwendest, dann versuch mal zipOut.flush() vor zipOut.close() - da gabs da glaub ich frueher mal Probleme.
 
B

blume

Gast
Hallo kleiner_held!

Danke für die Antwort.

Ich arbeite mit JDK 1.4. Aber leider funktioniert es auch nicht mit zipOut.flush() :(

Vielleicht noch ne andere Idee?
 

kleiner_held

Top Contributor
Also ich hab es grade mal mit 1.4 laufen lassen - funktioniert auch.

Es ist nur ein wenig ungewoehnlich, dass bei der Pfad-Angabe im Zip der Laufwerksbuchstabe mit uebernommen wird.
 
B

blume

Gast
Danke :applaus: das war es. Der Laufwerksbuchstabe hat den Fehler verursacht.

Ich habe jetzt geschrieben:

Code:
package mypackage9;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Class1 
{
  public Class1()
  {
  }
  
      //@param dir: Verzeichnis, das gezippt werden soll
    //@param zipFileName: Name der zu erstellenden Zip-Datei
    public static void createZipFile (String dir, String zipFileName) throws IOException
    {
        // Buffer zum Auslesen der Dateien.     
        byte[] buf = new byte[4096];      
        
        // Der vollständige Pfad zur zukünftigen Zip-Datei.     
        String dirFile = dir + zipFileName;      
        
        // Die XML-Dateien werden in diese Datei geschrieben.     
        //ZipOutputStream zipOut =  new ZipOutputStream( new FileOutputStream(dirFile));      
        
        // Das Verzeichnis, dessen Dateien gesichert werden sollen.     
        File dirZip = new File(dir);      
        
        // Alle Dateinamen aus dem Verzeichnis werden in des Array eingelesen.     
        File [] fileArray = dirZip.listFiles();      
        String fileName = "";
        
        // Die XML-Dateien werden in diese Datei geschrieben.     
        ZipOutputStream zipOut =  new ZipOutputStream( new FileOutputStream(dirFile));        
        
        // Alle Dateien auslesen.     
        for(int i = 0; i < fileArray.length; i++)     
        {       
            // Der Name der Datei wird ermittelt.       
            fileName = fileArray[i].getAbsolutePath();             
            
            System.out.println(fileName);
            
            // Zip-Dateien ignorieren.       
            if (fileName.endsWith(".zip")) continue;        
            
            // Die Datei wird zum Lesen geöffnet.        
            FileInputStream inFile = new FileInputStream(fileName);
            
            //System.out.println("Parent: " + fileArray[i].getParent());
            
            // Info an Zip-Datei: Jetzt kommt neuer Eintrag.       
            //zipOut.putNextEntry(new ZipEntry(fileName));        
            zipOut.putNextEntry(new ZipEntry("Ordner/" + fileArray[i].getName()));
            int len;        
            
            // Der Inhalt der Datei wird in die Zip-Datei kopiert.       
            while ((len = inFile.read(buf)) > 0)        
            {         
                zipOut.write(buf, 0, len);       
            }        
            inFile.close();
            
        }      
        
        // Die Zip-Datei ist erzeugt.     
        zipOut.close();    
    }
  
  public static void main(String[] args)
  {
    try{
      createZipFile("K:/Test/Ordner/","export.zip");
    }catch (Exception e)
    {
      e.printStackTrace();
    }
  }
}

Allerdings hab ich jetzt bei
Code:
zipOut.putNextEntry(new ZipEntry("Ordner/" + fileArray[i].getName()));
"Ordner/" hart codiert. Find ich jetzt nicht so elegant. Kann ich den Überordner irgendwie abfragen? Mit getParent() wird wieder der ganze Pfad angezeigt.
 

kleiner_held

Top Contributor
Ich wuede beim Methoden-Aufruf angeben, welchen Teil des Verzeichniss-Baums ich im Zip haben will und welchen nicht
Code:
    public static void createZipFile(String rootDir, String subDir, String zipFileName)
    {
        File dir = new File(rootDir, subDir);
  
        File [] fileArray = dir.listFiles();     
	  
        ... 
      
        zipOut.putNextEntry(new ZipEntry(subDir + fileArray[i].getName())); 
    }


    createZipFile("K:/Test/", "Ordner/","export.zip");
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Überprüfen ob String Array leer ist Java Basics - Anfänger-Themen 4
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
L Enumeration Wetter - leer initialiseren? Java Basics - Anfänger-Themen 5
D Warum nicht true wenn Array leer ist? Java Basics - Anfänger-Themen 8
J SVN Repository Prüfung ob leer ist Java Basics - Anfänger-Themen 23
Aruetiise Variablen Array ist leer? Java Basics - Anfänger-Themen 6
S Prüfen ob Zelle in Excel leer ist funktioniert nicht (Apache POI) Java Basics - Anfänger-Themen 18
MiMa Leere Datei ist nicht Leer ?? Java Basics - Anfänger-Themen 6
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
M Ausgabe eines txt Dokuments, Dokument leer Java Basics - Anfänger-Themen 1
M Felder leer - überprüfen? Java Basics - Anfänger-Themen 2
D In Arrayfeld schreiben wenn leer Java Basics - Anfänger-Themen 8
K Methoden ResultSet als Methodenübergabewert kommt leer an Java Basics - Anfänger-Themen 0
Z JPanel bleibt leer Java Basics - Anfänger-Themen 2
S TextFieldFilter - Wenn Textfeld leer dann setze 0 Java Basics - Anfänger-Themen 9
W Erste Schritte Array[0] ist leer ? Java Basics - Anfänger-Themen 4
M Falls ---.getText == leer Problem! Java Basics - Anfänger-Themen 9
A Klassen JTextField eigtl leer aber es werden Methoden ect. angezeigt Java Basics - Anfänger-Themen 9
F JNumberField leer? Java Basics - Anfänger-Themen 16
X Array leer Java Basics - Anfänger-Themen 15
H Input/Output Testen ob Datei leer Java Basics - Anfänger-Themen 14
B getInputStream() - auslesen bleibt leer Java Basics - Anfänger-Themen 2
P While schleife: Konsole bleibt leer :D Java Basics - Anfänger-Themen 5
S Prüfen,ob array leer ist Java Basics - Anfänger-Themen 15
B Process.getInputStream immer leer Java Basics - Anfänger-Themen 3
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
R Adjazenzliste leer Java Basics - Anfänger-Themen 3
G Integer auf Leer überprüfen Java Basics - Anfänger-Themen 44
reno Testen ob String leer ist Java Basics - Anfänger-Themen 12
D Drucken - Seite leer Java Basics - Anfänger-Themen 2
U Animation bleibt leer (weiß) Java Basics - Anfänger-Themen 5
P Prüfen ob alle zellen der tabelle leer sind Java Basics - Anfänger-Themen 9
H Datei nach serialisieren leer ? Java Basics - Anfänger-Themen 10
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4
G Table bleibt leer :( Java Basics - Anfänger-Themen 12
M Feststellen, das Textboxen leer sind! Java Basics - Anfänger-Themen 3
M String ist leer Java Basics - Anfänger-Themen 14
B Datei leer? Java Basics - Anfänger-Themen 6
E Probleme bei Stringvergleich, leer String = gefülltem String Java Basics - Anfänger-Themen 2
S Array bleibt leer, wo liegt mein Fehler? Verzeichnisinhalt s Java Basics - Anfänger-Themen 8
K Variable leer oder nicht Java Basics - Anfänger-Themen 4
C checken ob ein Vektor leer ist Java Basics - Anfänger-Themen 3
A Fenster bleibt leer und schließt sich nicht Java Basics - Anfänger-Themen 26
P Fragen, ob Eingabefeld leer ist oder nicht Java Basics - Anfänger-Themen 2
G jComboBox zunächst leer Java Basics - Anfänger-Themen 6
R Zeile leer lassen Java Basics - Anfänger-Themen 2
V JList(s) leer sobald ein Eintrag in 2+ Listen gewählt wird Java Basics - Anfänger-Themen 3
H Übergabe eines Wertes an eine Bean --> Bean leer Java Basics - Anfänger-Themen 6
K Prüfen, ob Queue leer ist Java Basics - Anfänger-Themen 5
G Mein Array bleibt immer leer????????? Java Basics - Anfänger-Themen 8
S Datei nach FileOutputStrem leer, warum ? Java Basics - Anfänger-Themen 2
G Variablen werden leer ausgelesen (Wert wurde zugewiesen) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben