當我使用FileUtils.copyDirectory()
時,關於可執行文件的執行位被關閉。
我是否必須手動打開它們?如何在使用FileUtils.copyDirectory時保留文件權限?
FWIW,我的umask設置爲0027,但它看起來像FileUtils.copyDirectory()
沒有使用該設置,因爲除了執行位之外的其他權限被保留。
當我使用FileUtils.copyDirectory()
時,關於可執行文件的執行位被關閉。
我是否必須手動打開它們?如何在使用FileUtils.copyDirectory時保留文件權限?
FWIW,我的umask設置爲0027,但它看起來像FileUtils.copyDirectory()
沒有使用該設置,因爲除了執行位之外的其他權限被保留。
我不認爲它可能是因爲JVM的限制。 IO API和行爲對於世界上最流行的語言/平臺來說是有點可恥的。
如果你看一下文件實用程序的源代碼,在複製它創建類似這樣的
File copiedFile = new File(destDir, srcFile.getName());
文件權限不保留新的文件。在實際複製過程中,這些字節被批量複製(緩衝)並寫入新文件。
但是,您可能需要等待幾天或使用帶有apis的JDK7預覽版才能實現此功能。
即將推出的Java 7中的Filesystem將有所幫助。看看JSR-203。如果您使用的是Linux,則可以使用帶有Java 6的backport。
您需要的新API是:Files.copy(Path, Path, CopyOptions)
。請注意,CopyOptions
有COPY_ATTRIBUTES
,這將做你想要的。
你在使用什麼操作系統?如果Linux,FreeBSD和Mac OS X的行爲不同,我不會感到驚訝...... – gutch
我在Linux上。 由於我有一個解決方法,我會等到我的公司採用Java 7。 –