# ZIP File und Dateiattribute



## schindi42 (4. Dezember 2009)

Hallo,

ich habe folgendes Problem. In meinem Programm soll ein ZIP File entpackt und anschließend mit den entpackten Dateien gearbeitet werden. Das entpacken funktioniert ja schon ganz gut. Leider scheint bei ZIP die Dateiattribute verloren zu gehen. Wie z.B. unter Linux das rwx. Da ich aber auch eine Datei ausführen möchte sind diese Attribute sehr wichtig 

Kennt jemand ein Format, das sich mit Java entpacken lässt, in dem die Dateiattribute erhalten bleiben? Und wenn ja, wie man es mit Java entpackt?

Viele Grüße,
Stefan


----------



## Anime-Otaku (4. Dezember 2009)

Der Zip Container ist meines Wissens dafür nicht geeignet. In Linux wird meistens gzip/bzip in Verbindung mit tar verwendet, da gzip nur auf einer Datei funktioniert.

Für gzip gibt es in Java den GZipStream (oder so ähnlich).


----------



## schindi42 (8. Dezember 2009)

Hallo,

ich habe das mal mit einer gzip Datei ausprobiert. Da es sich um mehrere Dateien handelte, musste ich zusätzlich auf ein tar-Archiv zurückgreifen. Das ge-zippte File lässt sich sehr schön mit Java wieder ent-zippen. Nur um das tar-Archiv zu entpacken muss ich auf eine externe Bibliothek zurückgreifen. Ich habe hierfür Apache common compress genommen. 

Entweder mache ich etwas Grundlegend falsch, oder es geht einfach nicht. Auf jeden Fall haben die Dateien, die vorher 777 als Linux rechte hatte nun plötzlich 644 und sind daher nicht mehr ausführbar. Wenn ich jedoch das tar-Archiv über die Konsole mit "tar xfvz  Dateiname" entpacke sind die Rechte jedoch da. Ich vermute mal, es liegt daran, dass Java die Dateien neu anlegt und dafür dann Standartrechte vergibt. Kennt jemand eine Möglichkeit, wie ich die ursprünglichen Rechte herausfinde und sie dann den Dateien wiedergeben kann?


----------



## zerix (8. Dezember 2009)

Hallo,

das hat nichts mit GZip oder ZIP zu tun. Diese Attribute haben nichts mit der Datei direkt sondern mit dem Datei-System zu tun. Beispielsweise bei Windows hast du diese Datei-Attribute nicht, was soll denn da gespeichert werden?

Nach dem entpacken der Dateien hast du 644, weil das die standardmäßige umask ist. Das heißt, wenn du bei deinem Linux eine neue Datei erstellst wird sie mit 644 erstellt. Nichts anderes passiert beim entpacken aus einem ZIP-Archiv. Für das BS wird dort eine neue Datei mit einem bestimmten Inhalt erstellt. 

Gruß

Sascha


----------



## schindi42 (8. Dezember 2009)

Hallo,

unter Windows klappt das auch prima  Leider läuft mein Programm auf einem Linux System :-(

Ok, das mit der umask hab ich verstanden und leuchtet mir soweit auch ein. 

Irgendwo in dem zip- oder tar-Archiv müssen die ursprünglichen Attribute der Dateien stehen, da sie ja restauriert werden, wenn ich die Dateien auf herkömmliche Weise, von der Kommandozeile aus, entpacke.
Mein Problem ist, dass sich in der gepackten Datei ein paar Shell Scripte befinden, die ich ausführen will. Also ist für mich das vor allem "x"-Attribut wichtig! Kann ich über java herausfinden, was für Attribute die Datei vorher hatte? Weil setzten kann ich sie anscheinend mit den Methoden file.setExecutable(boolean), file.setWritable(boolean) und file.setReadable(boolean).

Viele grüße,
Stefan


----------



## zerix (8. Dezember 2009)

Normal sollten sie nicht in der Zip-File stehen, da sie wie gesagt nichts mit der eigentlichen Datei zu tun haben. 
Deshalb kannst du sie auch nicht abfragen. 
Eine Möglichkeit wäre, wenn du das Zipfile mit deinem Programm erstellst, dass du die Attrribute der Original-Datei ausliest und diese in einer extra Datei in dem Zip-File speicherst.

Gruß

Sascha


----------



## schindi42 (8. Dezember 2009)

Das wäre auf jeden Fall eine Möglichkeit. Aber ich bin mir eigentlich sicher, dass sich diese Infos irgendwo bereits in der gepackten Datei befinden müssen. Sonst würde das entpacken über die Kommandozeile auch nicht funktionieren und bei diesem bleiben die Attribute erhalten. 
Es würde einiges erleichtern, wenn ich diese Informationen abfragen und verwenden könnte.

Viele Grüße,
Stefan


----------



## Thomas Darimont (8. Dezember 2009)

Hallo,

wenn du das Archiv unter Linux mit dem Kommandozeilen Tool "zip" erstellst bleiben die Datei-Attribute erhalten, wenn du dieses Archiv anschließend mit "unzip" entpackst.

Zip / unzip könntest du unter Linux mit dem ProcessBuilder aufrufen.



> tom@halu:/tmp$ ls -afl attributes.txt
> -rwxrwx--x 1 tom tom 1645 2009-12-08 19:50 attributes.txt
> tom@halu:/tmp$ zip attributes.zip attributes.txt
> adding: attributes.txt (deflated 60%)
> ...



Gruß Tom


----------



## schindi42 (8. Dezember 2009)

Hi,

über den ProcessBuilder klappt es. Ist zwar schade, dass ich so auf ein externes Programm angewiesen bin, lässt sich aber wohl, außer mit Saschas Idee mit der Liste, auf die Schnelle nicht anders realisieren. 

Vielen Dank für die Hilfe!!

Stefan


----------

