Поддерживать разрешения файлов при извлечении из zip файла с помощью JDK 5 api
Я использую java.util.Zip и java.util.ZipEntry для успешного добавления содержимого zip файла на диск. Я хотел бы сохранить разрешения для файлов, установленные при извлечении в файловой системе * nix.
Может ли кто-нибудь указать мне на "правильный" способ сделать это?
Ответы
Ответ 1
Это довольно старый, но так как я оказался здесь...
Этот вопрос содержит много информации: создание файла jar - сохранение прав на файл
По сути, вы не можете разрешать файлы STORE (unix) в файлах Zip/Jar, поэтому вы не можете их сохранять при извлечении фляги (они были потеряны, когда банку было создано для начала).
Если вам нужны права доступа к файлу, сохраненные в архиве и восстановленные при экстраватизации, вам необходимо рассмотреть альтернативный формат .tar или .tar.gz/.tar.bz2, который также поддерживается большинством инструментов сборки Java (Ant, Gradle, Maven...)
Ответ 2
Я думаю, что на самом деле невозможно правильно сохранить разрешения.
Разрешения очень специфичны для ОС: в то время как разрешения на доступ к файлам POSIX позволяют пользователю установить, можете ли вы читать, записывать или запускать файл для владельца файла, группы и других, файловая система NTFS имеет аналогичную систему, но концепция для разрешение на выполнение является неубедительным. И ранняя файловая система FAT/FAT32 вообще не имеет прав доступа к файлу (часть из атрибута только для чтения).
Будучи кросс-платформенным, Java-серверу будет сложно правильно установить разрешение на вновь созданные (распакованные) файлы в зависимости от базовой ОС....
Тем не менее, у Java 6 есть новый класс java.io.File, который позволяет вам устанавливать разрешения (с помощью таких методов, как setExecutable(), setReadable() и т.д., см. http://java.sun.com/javase/6/docs/api/java/io/File.html)
Это очень помогло мне, особенно setExecutable(), и это было моей основной проблемой при распаковке исполняемых файлов в файловой системе Linux. И вам не нужно беспокоиться о том, какую ОС вы используете, поскольку метод просто ничего не сделает, если работает под Windows или другими системами без концепции исполняемых файлов.
Ответ 3
Посмотрите на Commons Compress:
http://commons.apache.org/compress/
и посмотрите на TarArchiveEntry, который должен сохранять разрешения на файлы, как вы этого хотите.
TarArchiveEntry entry = tarInput.getNextTarEntry();
http://commons.apache.org/compress/apidocs/index.html
Я думаю, что я потерял сознание Commons...