1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Zipfile modifizieren in Java

    • Frage
  • Zentor
  • 28. Mai 2007 um 10:59
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Zentor
    Punkte
    2.710
    Beiträge
    506
    • 28. Mai 2007 um 10:59
    • #1

    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

  • Kornuun
    Punkte
    140
    Beiträge
    28
    • 28. Mai 2007 um 21:51
    • #2

    naja in java kann man ja auch konsolencommands absetzen, also das zipprogramm aufrufen. damit könnte es auch anders gehen. Oder gibts eine eigene java zip api?

  • Zentor
    Punkte
    2.710
    Beiträge
    506
    • 28. Mai 2007 um 23:29
    • #3

    Ja klar, ich beziehe mich auf java.util.zip.* Das Programm soll plattformunabhängig sein. Externe Systeme können außerdem nicht direkt als zip-stream verwendet werden.

  • josef19
    Punkte
    749
    Beiträge
    135
    • 29. Mai 2007 um 09:16
    • #4
    Zitat von Zentor

    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)

  • Zentor
    Punkte
    2.710
    Beiträge
    506
    • 29. Mai 2007 um 18:30
    • #5

    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.

  • josef19
    Punkte
    749
    Beiträge
    135
    • 29. Mai 2007 um 20:54
    • #6

    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.

  • Zentor
    Punkte
    2.710
    Beiträge
    506
    • 29. Mai 2007 um 23:17
    • #7

    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

  • mdk
    Punkte
    7.120
    Beiträge
    1.390
    • 29. Mai 2007 um 23:31
    • #8
    Zitat von Zentor


    Welcher "easy workaround" bitte???

    wahrs. den, den du oben beschrieben hast: auslesen, bearbeiten, zurückschreiben.

  • psycho
    Punkte
    296
    Beiträge
    57
    • 29. Mai 2007 um 23:37
    • #9
    Zitat von Zentor

    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

    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.


    Welcher "easy workaround" bitte???
    mfg Oliver

    Alles anzeigen

    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?

  • Zentor
    Punkte
    2.710
    Beiträge
    506
    • 30. Mai 2007 um 07:36
    • #10

    TrueZip hab ich mir noch nicht angeschaut. Ich will möglichst keinen Fremdcode drinnen haben. Tja echt komisch das eine solche Funktion fehlt. Kann man wohl nix machen.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum