2011-07-27 9 views
7

FileUtils.copyDirectory()を使用すると、実行可能ファイルの実行ビットがオフになります。
手動でオンにする必要がありますか?FileUtils.copyDirectoryを使用しているときにファイル許可を保持する方法は?

FWIW、私のumaskは0027に設定されていますが、FileUtils.copyDirectory()は実行ビット以外の 'その他'のパーミッションが保持されているため、この設定を使用していないようです。

+0

使用しているオペレーティングシステムは? Linux、FreeBSD、Mac OS Xで動作が異なる場合、私は驚くことはありません。 – gutch

+0

私はLinuxを使用しています。 私は回避策があるので、私は自分の会社でJava 7を採用するまで待つでしょう。 –

答えて

3

JVMの制限のために可能性はありません。 IO APIと動作は、世界で最も人気のある言語/プラットフォームにとってちょっと恥ずかしいものです。

あなたが中に、のfileutilsソースコードを見た場合には、

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

この

のように、それは新しいファイルを作成し、コピーしたファイルのパーミッションは保持されません。そして、実際のコピーの間、バイトはバッチで(バッファされて)コピーされ、新しいファイルに書き込まれます。

しかし、これを可能にするためにapiを持つJDK7のプレビューリリースを使用することもできます。

5

Java 7の次のファイルシステムの追加が役立ちます。 JSR-203を見てください。 Linuxを使用している場合は、backportをJava 6で使用できます。

新しいAPIは、Files.copy(Path, Path, CopyOptions)です。 CopyOptionsにはCOPY_ATTRIBUTESがあることに注意してください。

関連する問題