# Zip - Dateien bearbeiten .....



## Miskral (26. Feb 2004)

Hallo zusammen, 

Ich habe folgendes Problem. Ich möchte zu einer bestehenden Zip - Datei neue Dateien hinzu fügen. Ich habe zwar eine funktionierende lösung aber die gefällt mir irgend wie nicht so, weil ich dort die vorhandene Zip Datei öffne alle ZipEntry's durchlaufe und in eine zweite temporäe Datei speichere. D.h. alle Dateien werden entpackt und wieder gepackt und zudem noch umkopiert auf der Festplatte. Da die Datei von tag zu tag anwachsen wird, da es eine Protokoll datei ist, die später mehrere Textdateien enthalten soll, halte ich das für zu Zeitintensiv. 

Ich habe die API von Sun schon durchstöbert, bin aber nicht fündig geworden. 

Jetzt meien Frage! 
Gibt es ein Möglichkeit die Datei direkt zu bearbeiten so das dort Einträge ersetzt bzw. hinzu gefügt werden können? Vieleich hat jemand eine API die die von SUN ersetzt oder erweitert mit der das möglich ist. 

Mein bisheriger Code : 


```
String filename = Vorgaben.get_Pfad_fuer_Ausrechnungsdaten() + "V" + this.getVertreternummer() + ".zip"; 
    String entryName = this.anlagennummer + ".txt"; 
     
    byte[] buf = new byte[4096]; 
    try 
    { 
      File inf = new File(filename); 
      File outf = new File(filename + "~"); 
      ZipOutputStream out = new ZipOutputStream( 
                            new FileOutputStream(outf)); 
      out.setComment("Datei beinhaltet die Ausrechnungsdaten fuer Schliessanlagen." + 
                     "\nVertretergebiet : " + this.getVertreternummer() + 
                     "\nProgramm : " + this.PROGNAME + 
                     "\nVersion : " + this.VERSION); 
      if(inf.exists()) 
      { 
        ZipFile zipfile = new ZipFile(inf); 
        Enumeration enum = zipfile.entries(); 
        while (enum.hasMoreElements()) 
        { 
          ZipEntry ent = (ZipEntry)enum.nextElement(); 
          if(ent.getName().equalsIgnoreCase(entryName)) continue; 
          InputStream in = zipfile.getInputStream(ent); 
          out.putNextEntry(ent); 
          int len; 
          while ((len = in.read(buf)) > 0) 
          { 
            out.write(buf, 0, len); 
          } 
          in.close(); 
        } 
        zipfile.close(); 
      } 

      ZipEntry ent = new ZipEntry(entryName); 
      out.putNextEntry(ent); 
      PrintStream ps = new PrintStream(out); 

      // Kommentar in die Datei einfügen. 
      ps.println("R:********************************************"); 
      ps.println("R:* Profildaten Verschlüsselt *"); 
      ps.println("R:********************************************"); 

// Alles möglich in die Datei schreiben....... 

      ps.close(); 
      out.close(); 
      inf.delete(); 
      outf.renameTo(inf);
```
Funktionieren tut der auch. Aber Weiß nicht ob der wirklich sinnvoll ist. 

Vielen dank schon mal für eure Antworten!

chris


----------



## Guest (7. Apr 2004)

Miskral hat gesagt.:
			
		

> Hallo zusammen,
> 
> Ich habe folgendes Problem. Ich möchte zu einer bestehenden Zip - Datei neue Dateien hinzu fügen. Ich habe zwar eine funktionierende lösung aber die gefällt mir irgend wie nicht so, weil ich dort die vorhandene Zip Datei öffne alle ZipEntry's durchlaufe und in eine zweite temporäe Datei speichere. D.h. alle Dateien werden entpackt und wieder gepackt und zudem noch umkopiert auf der Festplatte. Da die Datei von tag zu tag anwachsen wird, da es eine Protokoll datei ist, die später mehrere Textdateien enthalten soll, halte ich das für zu Zeitintensiv.
> 
> ...



Hi Chris!

Nein, geht meines Wissens definitiv nicht.
Ich habe bei der IBM ein Winzip mittels Java geschrieben und stand am Ende vor dem gleichen Problem.
Dies war mit dem jdk 1.1.8. Aber bis heute hat sich dahingehend nicht viel getan.

CU

CoolHour
http://www.java-studio.de


----------

