1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Zipfile modifizieren in Java

    • Frage
  • Zentor
  • 28. Mai 2007 um 10:59
  • Unerledigt
  • Zentor
    16
    Zentor
    Mitglied
    Reaktionen
    5
    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
    4
    Kornuun
    Mitglied
    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
    16
    Zentor
    Mitglied
    Reaktionen
    5
    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
    9
    josef19
    Mitglied
    Reaktionen
    9
    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)

    Warum einfach, wenns kompliziert geht ! USB-CD-ROM mit USB-Stick emulieren

  • Zentor
    16
    Zentor
    Mitglied
    Reaktionen
    5
    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
    9
    josef19
    Mitglied
    Reaktionen
    9
    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.

    Warum einfach, wenns kompliziert geht ! USB-CD-ROM mit USB-Stick emulieren

  • Zentor
    16
    Zentor
    Mitglied
    Reaktionen
    5
    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
    26
    mdk
    Emeritus
    Reaktionen
    130
    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
    6
    psycho
    Mitglied
    Reaktionen
    1
    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
    16
    Zentor
    Mitglied
    Reaktionen
    5
    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.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung