2009-06-26 13 views
16

Używam java.util.Zip i java.util.ZipEntry do pomyślnego dodania zawartości pliku zip na dysk. Chciałbym zachować uprawnienia do plików ustawione podczas wyodrębniania w systemie plików * nix.Zachowywanie uprawnień do plików podczas wyodrębniania z pliku zip przy użyciu JDK 5 api

Czy ktoś może wskazać mi "prawidłowy" sposób, aby to zrobić?

+0

Wiem, że to raczej stary post, ale czy rozwiązałeś ten problem? Mam teraz ten sam problem; Wygląda na to, że jak na razie wygląda tylko plik wykonywalny ... kiedy rozpakowuję go "ręcznie", to zgoda jest poprawna. – dm76

+0

Nie rozwiązałem go w rzeczywistości. Ostatnim moim pomysłem było odciągnięcie zadania mrównego Apache'a od manipulowania plikami zip i określenia, co robią. –

+0

Ant może to zrobić tylko od 1.8, używając nowej funkcji Java.io.File w java 6 (zobacz moją odpowiedź poniżej) – dm76

Odpowiedz

1

To jest dość stary, ale ponieważ skończyło się tutaj ...

to pytanie dostarcza mnóstwo informacji: creating a jar file - preserving file permissions

Zasadniczo nie można Store (UNIX) uprawnienia do plików w ZIP/JAR pliki, więc nie można ich zachować podczas wyodrębniania słoja (zostały utracone, gdy słoik został utworzony na początek). Jeśli potrzebujesz uprawnień do pliku zachowanych w archiwum i przywróconych podczas wypakowywania, musisz rozważyć alternatywny format .tar lub .tar.gz/.tar.bz2, który jest również natywnie obsługiwany przez większość narzędzi do budowania Java (Ant, Gradle , Maven ...)

1

Spójrz Commons Compress:

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

i spojrzeć na TarArchiveEntry, że powinien zachować uprawnienia do plików jak chcesz go.

TarArchiveEntry entry = tarInput.getNextTarEntry(); 

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

Chyba poszedł Commons mad ...

+0

czy TarArchiveEntry działa na zipach, a także na plikach tar? to nie to samo, prawda? – Cheeso

+0

Zgadzam się z Cheeso - co to ma wspólnego z plikami zip? – dm76

+0

Istnieje również ZipArchiveEntry https://commons.apache.org/proper/commons-compress/zip.html – Josejulio

8

myślę, że to jest rzeczywiście niemożliwe, aby utrzymać prawidłowe uprawnienia.

Uprawnienia są bardzo specyficzne dla systemu operacyjnego: podczas gdy uprawnienia pliku POSIX pozwalają użytkownikowi ustawić, czy można czytać, pisać lub wykonywać plik dla właściciela pliku, grupy i innych, system plików NTFS ma podobny system, ale koncepcja dla zezwolenia na wykonanie jest niedorozwinięte. A wczesny system plików FAT/FAT32, w ogóle nie ma uprawnień do plików (część z atrybutu tylko do odczytu).

Będąc cross-platform, byłoby trudne dla Java, aby ustawić uprawnienia właściwie na nowo utworzonych plików (rozpakowane) w zależności od bazowego OS ....

Powiedział, że Java 6 ma nowy java .io.File klasy, która pozwala na ustawienie uprawnień (metodami takimi jak setExecutable(), setReadable(), etc ... zobacz http://java.sun.com/javase/6/docs/api/java/io/File.html)

Te pomogły mi bardzo, szczególnie setExecutable(), który był moim głównym zainteresowanym kiedy trzeba rozpakować pliki wykonywalne w systemie plików Linux. I nie musisz martwić się o to, jaki system operacyjny jest uruchomiony, ponieważ ta metoda po prostu nie zrobi niczego, jeśli działa pod Windows lub innymi systemami bez koncepcji plików wykonywalnych.

+1

Wiem, że wątek się starzeje, ale Twoja odpowiedź mi pomogła. Próbowałem wyodrębnić aplikację ***. Na Mac OS, ale uruchomiona aplikacja uruchomi się, zmieniłem uprawnienia rzeczywistego pliku launchera w środku za pomocą metody setExecutable() i wygląda na to, że działa doskonale! Dzięki za pomoc :) –

Powiązane problemy