Подтвердить что ты не робот

Поддерживать разрешения файлов при извлечении из zip файла с помощью JDK 5 api

Я использую java.util.Zip и java.util.ZipEntry для успешного добавления содержимого zip файла на диск. Я хотел бы сохранить разрешения для файлов, установленные при извлечении в файловой системе * nix.

Может ли кто-нибудь указать мне на "правильный" способ сделать это?

4b9b3361

Ответ 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 или другими системами без концепции исполняемых файлов.