2009-06-26 5 views
16

Ich verwende java.util.Zip und java.util.ZipEntry, um den Inhalt einer Zip-Datei erfolgreich auf die Festplatte zu kopieren. Ich möchte die Dateiberechtigungen beibehalten, die beim Extrahieren auf einem * nix-Dateisystem festgelegt werden.Pflegen Sie die Dateiberechtigungen beim Extrahieren aus einer Zip-Datei mit JDK 5 api

Kann mir jemand auf die "richtige" Weise, dies zu tun?

+0

Ich weiß, das ist ein ziemlich alter Beitrag, aber haben Sie dieses Problem gelöst? Ich habe gerade das gleiche Problem; Es scheint nur eine ausführbare Datei so weit zu beeinflussen ... wenn ich es "von Hand" entzippe, ist die Berechtigung korrekt – dm76

+0

Ich habe es tatsächlich nicht gelöst. Mein letzter Annäherungsvektor würde sein, Apache's Ameisen-Aufgabe auseinander zu ziehen, um Zip-Dateien zu manipulieren und zu bestimmen, was sie tun. –

+0

Ant kann das nur seit 1.8 tun, mit der neuen Funktion von Java.io.File in Java 6 (siehe meine Antwort unten) – dm76

Antwort

1

Das ist ziemlich alt, aber da ich hier ...

Diese Frage stellt viele Informationen endete: creating a jar file - preserving file permissions

Im Wesentlichen kann man nicht STORE (Unix) Dateiberechtigungen in Zip/Jar Dateien, so dass Sie sie beim Extrahieren Ihres Jars nicht behalten können (sie sind verloren gegangen, als das JARO ursprünglich erstellt wurde). Wenn die Dateiberechtigungen im Archiv beibehalten und beim Extrahieren wiederhergestellt werden müssen, müssen Sie das alternative .tar - oder .tar.gz/.tar.bz2 - Format berücksichtigen, das auch von den meisten Java - Erstellungstools (Ant, Gradle) nativ unterstützt wird , Maven ...)

1

Blick auf Commons Compress:

http://commons.apache.org/compress/

und Blick auf TarArchiveEntry, das sollte die Dateiberechtigungen erhalten, wie Sie es wollen.

TarArchiveEntry entry = tarInput.getNextTarEntry(); 

http://commons.apache.org/compress/apidocs/index.html

Ich glaube, ich habe den Verstand verloren Commons ...

+0

funktioniert TarArchiveEntry auf Reißverschlüssen sowie Tar-Dateien? Sie sind nicht gleich, oder? – Cheeso

+0

Ich stimme Cheeso zu - was hat das mit Zip-Dateien zu tun? – dm76

+0

Es gibt auch ZipArchiveEntry https://commons.apache.org/proper/commons-compress/zip.html – Josejulio

8

Ich denke, es ist eigentlich unmöglich ist richtig, die Berechtigungen zu halten.

Berechtigungen sind sehr betriebssystemspezifisch: Während POSIX-Dateiberechtigungen dem Benutzer erlauben zu bestimmen, ob Sie eine Datei für den Dateibesitzer, die Gruppe und andere lesen, schreiben oder ausführen können, hat das NTFS-Dateisystem ein ähnliches System, aber das Konzept für eine Ausführungsberechtigung ist nicht vorhanden. Und das frühe FAT/FAT32 Dateisystem, hat überhaupt keine Dateiberechtigungen (ein Teil vom schreibgeschützten Attribut).

Als Cross-Plattform, wäre es schwierig, für Java die Erlaubnis richtig auf den neu erstellten (entpackten) Dateien auf dem zugrunde liegenden Betriebssystem abhängig zu setzen ....

Das heißt, hat Java 6 eine neue Java .io.File-Klasse, mit der Sie Berechtigungen setzen können (mit Methoden wie setExecutable(), setReadable(), etc ... siehe http://java.sun.com/javase/6/docs/api/java/io/File.html)

Diese haben mir sehr geholfen, besonders die setExecutable(), die meine Hauptsorge war wenn ausführbare Dateien auf einem Linux-Dateisystem entpackt werden müssen. Und Sie müssen sich nicht darum kümmern, herauszufinden, auf welchem ​​Betriebssystem Sie laufen, da die Methode einfach nichts macht, wenn Sie unter Windows oder anderen Systemen ohne das Konzept ausführbarer Dateien laufen.

+1

Ich weiß, dass dieser Thread ziemlich alt wird, aber Ihre Antwort hat mir geholfen. Ich habe versucht, eine ***. App auf Mac Os zu extrahieren, aber die resultierende Anwendung würde starten, änderte ich Berechtigungen der eigentlichen Launcher-Datei darin mit der Methode setExecutable() und es scheint perfekt zu funktionieren! Danke für die Hilfe :) –

Verwandte Themen