Java: Archivattribut `A` fehlt beim programmgesteuerten Erstellen von zip

Wir haben es mit den Dekomprimierungsbibliotheken / Hilfsprogrammen zu tun, die Attribute verwenden, um das Vorhandensein von Verzeichnissen / Dateien in der ZIP-Datei zu überprüfen.

Problem ist, dass wir während der Erstellung kein Archivbit für eine Zip setzen können. Wenn wir zip programmatisch erstellen, werden auch die vorherigen Attribute gelöscht.

Wir werden versuchen, das Archivbit mit den folgenden Schritten zu setzen, aber bisher nicht das gewünschte Ergebnis zu erzielen:

1. Parse each zip entry and getExtra byte[].
2. Use Int value=32 and perform bitwise 'OR' operation.
3. setExtra byte[] after 'OR' operation.

Hinzufügen weiterer Details: Wir haben versucht, folgende Ansätze zu verfolgen, aber dieses Problem ist noch ungelöst.

UsingsetAttribute() -Methode im Dateisystem, aber das Abrufen der Attribute wird beim Erstellen von zip zurückgesetzt.Files.setAttribute(file, “dos:archive”, true)

UsingFile.copy() kopiert die mit der Datei verknüpften Dateiattribute in die Zieldatei, jedoch ohne Erfolg. Auch vorhandene Attribute bleiben in der Zieldatei nicht erhalten.Files.copy(path, path, StandardCopyOption.COPY_ATTRIBUTES)

UsingZipEntry.setExtra(byte[]). online einige Informationen gefunden, dass Java keine direkte Methode zum Festlegen von Attributen hat Dies ist ein undokumentiertes Feld. Wir konnten online keine verlässlichen Informationen finden. Grundsätzlich werden die ersten 2 Bytes für Unix und die letzten 2 Bytes für DOS-Dateiattribute verwendet. Wir haben versucht, DOS-Dateiattribute mit unterschiedlichen Werten festzulegen.ZipEntry.setExtra(byte[]) - Legt die optionalen zusätzlichen Felddaten für den Eintrag fest.

Verwenden Sie das Befehlszeilentool winzip, aber keine elegante Lösung.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage