当我使用FileUtils.copyDirectory()
时,可执行文件的执行位被关闭。
我是否必须手动打开它们?
FWIW,我的umask设置为0027,但看起来FileUtils.copyDirectory()
没有使用该设置,因为保留了除执行位之外的“其他”权限。
答案 0 :(得分:7)
Java 7中即将推出的Filesystem将有所帮助。看看JSR-203。如果您使用的是Linux,则可以将backport与Java 6一起使用。
您想要的新API是:Files.copy(Path, Path, CopyOptions)
。请注意,CopyOptions
有COPY_ATTRIBUTES
,可以执行您想要的操作。
答案 1 :(得分:3)
由于JVM的限制,我认为不可能。 IO api和行为对于世界上最流行的语言/平台来说是有点可耻的。
如果查看FileUtils源代码,在复制过程中会创建像这样的新文件
File copiedFile = new File(destDir, srcFile.getName());
不保留文件权限。在实际复制期间,字节被批量复制(缓冲)并写入新文件。
但是,您可以等待几天或使用JDK7的预览版本,它具有api以允许这种情况。