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

时间:2011-07-27 00:32:43

标签: java apache-commons

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

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

2 个答案:

答案 0 :(得分:7)

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

您想要的新API是:Files.copy(Path, Path, CopyOptions)。请注意,CopyOptionsCOPY_ATTRIBUTES,可以执行您想要的操作。

答案 1 :(得分:3)

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

如果查看FileUtils源代码,在复制过程中会创建像这样的新文件

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

不保留文件权限。在实际复制期间,字节被批量复制(缓冲)并写入新文件。

但是,您可以等待几天或使用JDK7的预览版本,它具有api以允许这种情况。