使用FileUtils.copyDirectory时如何保留文件权限?

Noe*_*Yap 9 java apache-commons

当我使用时FileUtils.copyDirectory(),执行位被关闭为可执行文件.
我必须手动打开它们吗?

FWIW,我的umask设置为0027但看起来FileUtils.copyDirectory()没有使用该设置,因为除了执行位之外的"其他"权限被保留.

Dil*_*nga 7

Java 7中即将推出的Filesystem将有所帮助.看看JSR-203.如果您使用的是Linux,则可以将后端与Java 6一起使用.

您想要的新API是:Files.copy(Path, Path, CopyOptions).需要注意的是CopyOptionsCOPY_ATTRIBUTES,这将做你想做的.


sma*_*007 3

由于 JVM 的限制,我认为这是不可能的。对于世界上最流行的语言/平台来说,IO api 和行为有点可耻。

如果您查看 FileUtils 源代码,在复制过程中它会创建如下所示的新文件

File copiedFile = new File(destDir, srcFile.getName()); 
Run Code Online (Sandbox Code Playgroud)

不保留文件权限。在实际复制过程中,字节会批量复制(缓冲)并写入新文件。

但是,您可以等待几天或使用 JDK7 的预览版,它具有 api 来允许此操作成为可能。