Zipfile modifizieren in Java

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • Hallo,
    gibt es eine Möglichkeit einen einzelnen ZipEntry in einem ZipFile zu löschen/ersetzen? Ich hab über Google nur einen sehr unbefriedigenden Weg gefunden: Alle anderen ZipEntrys in einen neuen TempFile schreiben bis auf den, den man entfernen/modifizieren will. Damit hätte ich aber bei großen zip Files jedes mal eine irsinnige Kopierzeit.
    mfg Oliver

  • Hallo,
    gibt es eine Möglichkeit einen einzelnen ZipEntry in einem ZipFile zu löschen/ersetzen? Ich hab über Google nur einen sehr unbefriedigenden Weg gefunden: Alle anderen ZipEntrys in einen neuen TempFile schreiben bis auf den, den man entfernen/modifizieren will. Damit hätte ich aber bei großen zip Files jedes mal eine irsinnige Kopierzeit.
    mfg Oliver

    Es wird aber ohne neuschreiben des ZIPs nicht gehen. Beim Zip-Format liegen ja alle Dateien direkt einzeln Komprimiert nacheinander. Wenn man dazwischen was löscht, müssen also alle anderen Einträge nach vor verschoben werden um ein kompaktes File zu erhalten.

    (Rein theoretisch könnte man ja hintere ZipEntry direkt in die Lücke hineinbasteln. ==> Wird nur gehen wenn man direkt das File byteweise manipuliert. ==> Ist sicher mühsam)

  • Ja, ich dachte, man kann eben einen ZipEntry aus einem Zip entferen, wenn die Entries im File alle sequenziell vorliegen, spricht doch nichts dagegen oder? Wie machen das WinZip/7-Zip ? Die entzippen auch *ALLES* was im Zip und zippen es dann wieder mit der Modifikation? Wenn ich bei einem 500MB Zip eine txt Datei ersetzte? So ein Verhalten wäre mir noch nicht aufgefallen, anderer Seits braucht man sowas seltener.

  • Wenn ich das wirklich programmieren müsste würde ich mal das file mit
    java.io.RandomAccessFile "durchwandern".
    http://java.sun.com/j2se/1.5.0/doc…AccessFile.html

    Im Zipstandard steht sicher, wie ein Header aussieht, und was man stattdessen drüberschreiben kann:
    http://www.pkware.com/documents/casestudies/APPNOTE.TXT

    Programieraufwand schätze ich aber von 10 - ?? Stunden reativ hoch.

  • Hm, ja eben. Wäre schön wenn es in der großen Java Library schon was entsprechendes gäbe. Ich versteh nicht, warum es kein ZipEntry.delete und beim ZipOutputStream kein append gibt. Diese Methoden würde für den Rest ausreichen (altes Element entfernen und neues Element added).
    Ich verstehe in diesem Zusammenhang nicht die Aussage auf
    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4129445
    [quote]
    This is certainly a reasonable request, but...
    - the jar command already offers the functionality from the command line.
    - the jar/zip code is already fragile enough without adding a new dimension
    to the testing matrix.
    - there are easy workarounds.
    [/qoute]

    Welcher "easy workaround" bitte???
    mfg Oliver

  • In den Kommentaren wird https://truezip.dev.java.net/ erwähnt. Ich habe das zwar nicht verwendet, aber schaut das nicht so aus, als ob das das könnte?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!