Как сохранить права доступа к файлам при использовании FileUtils.copyDirectory? - PullRequest
9 голосов
/ 27 июля 2011

Когда я использую FileUtils.copyDirectory(), биты выполнения отключаются для исполняемых файлов.
Нужно ли включать их вручную?

FWIW, мой umask установлен на 0027, но выглядитFileUtils.copyDirectory() не использует эту настройку, поскольку «другие» разрешения, кроме бита выполнения, сохраняются.

Ответы [ 2 ]

7 голосов
/ 27 июля 2011

Будущие дополнения файловой системы в Java 7 помогут. Посмотрите на JSR-203. Если вы используете Linux, вы можете использовать backport с Java 6.

Новый API, который вам нужен: Files.copy(Path, Path, CopyOptions). Обратите внимание, что CopyOptions имеет COPY_ATTRIBUTES, который будет делать то, что вы хотите.

3 голосов
/ 27 июля 2011

Я не думаю, что это возможно из-за ограничений JVM. API и поведение IO довольно позорные для самого популярного в мире языка / платформы.

Если вы посмотрите на исходный код FileUtils, во время копирования он создаст новый файл, подобный этому

File copiedFile = new File(destDir, srcFile.getName()); 

права доступа к файлу не сохраняются. А во время фактического копирования байты копируются пакетами (буферизируются) и записываются в новый файл.

но вы можете подождать пару дней или использовать предварительную версию JDK7, в которой есть apis, чтобы это стало возможным.

...