Вопрос по java – Сохранение прав доступа к файлу при извлечении из zip-файла с использованием API JDK 5

18

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

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

Я на самом деле не решил это. Мой последний вектор подхода заключался в том, чтобы отделить задачу муравья apache для управления zip-файлами и определить, что они делают. Raymond Kroeker
Я знаю, что это довольно старый пост, но вы решили эту проблему? У меня сейчас та же проблема; Пока что это только влияет на исполняемый файл ... когда я разархивирую его "вручную" разрешение верное dm76
Ant может делать это только с версии 1.8, используя новую функцию Java.io.File в Java 6 (см. Мой ответ ниже) dm76

Ваш Ответ

4   ответа
0

https://bugs.openjdk.java.net/browse/JDK-6194856:

The "standard" zip file format does not have any way to store "executable file" meta-information, since it was originally designed for MS-DOS filesystems.

In order to preserve Unix information like file modes, the zip handling code would have to handle extensions to the zip file format. Other zip implementations have such extensions.

There are some extensions to the file format that would allow maintaining this kind of information, but it can never be guaranteed (there is no requirement that zip files contain such "extended" metadata) and it would be a lot of work to implement and (especially!) test.

Также посмотрите этот ответ: Могу ли я хранить разрешения Unix в zip-файле (созданном с помощью Apache Ant)?

Нестандартные библиотеки Java могут реализовать это (например, apache-commons).

10

Разрешения зависят от конкретной ОС: в то время как разрешения для файлов POSIX позволяют пользователю устанавливать, можете ли вы читать, записывать или выполнять файл для владельца файла, группы и других, файловая система NTFS имеет аналогичную систему, но концепция разрешения на выполнение не существует. И ранние файловые системы FAT / FAT32 вообще не имеют прав доступа к файлам (часть атрибута только для чтения).

Будучи кроссплатформенным, java будет трудно правильно установить разрешение для вновь создаваемых (разархивированных) файлов в зависимости от базовой ОС ....

Тем не менее, Java 6 имеет новыйjava.io.File класс это позволяет вам устанавливать права доступа (с помощью таких методов, как setExecutable (), setReadable () и т. д.)

Это мне очень помогло, особенно setExecutable (), который был моей главной заботой при необходимости разархивировать исполняемые файлы в файловой системе Linux. И вам не нужно беспокоиться о том, чтобы выяснить, на какой ОС вы работаете, так как метод просто ничего не сделает, если он работает под Windows или другими системами без концепции исполняемых файлов.

Error: User Rate Limit Exceeded
1

вы не можете «хранить» (unix) права доступа к файлам в файлах Zip / Jar, поэтому вы не можете сохранять их при извлечении вашего jar (они были потеряны при создании jar с самого начала). Смотрите этот вопрос:создание файла jar - сохранение прав доступа к файлу

Если вам нужны права доступа к файлам, сохраненные в архиве и восстановленные при извлечении, вам следует рассмотреть альтернативный формат .tar или .tar.gz / .tar.bz2, который также изначально поддерживается большинством инструментов сборки Java (Ant, Gradle, Maven ...)

1

смотреть наApache Commons Compress и посмотрите на TarArchiveEntry, который должен сохранить права доступа к файлам так, как вы этого хотите.

TarArchiveEntry entry = tarInput.getNextTarEntry();

ВотJavadocs, Я думаю, что я с ума сошел ...

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededcommons.apache.org/proper/commons-compress/zip.html

Похожие вопросы