2011-07-27 29 views
7

Khi tôi sử dụng FileUtils.copyDirectory(), các bit thực thi sẽ bị tắt cho các tệp thực thi.
Tôi có phải bật chúng theo cách thủ công không?Làm thế nào để giữ quyền truy cập tệp khi sử dụng FileUtils.copyDirectory?

FWIW, umask của tôi được đặt thành 0027 nhưng có vẻ như FileUtils.copyDirectory() không sử dụng cài đặt đó vì quyền 'khác', ngoài bit thực thi, được giữ nguyên.

+0

Bạn đang sử dụng hệ điều hành nào? Tôi sẽ không ngạc nhiên nếu hành vi khác nhau giữa Linux, FreeBSD và Mac OS X ... – gutch

+0

Tôi đang sử dụng Linux. Vì tôi có một giải pháp thay thế, tôi sẽ đợi cho đến khi chấp nhận Java 7 trong công ty của tôi. –

Trả lời

3

Tôi không nghĩ rằng điều đó có thể xảy ra do giới hạn JVM. IO api và hành vi là kinda đáng xấu hổ cho ngôn ngữ phổ biến nhất/nền tảng trên thế giới.

Nếu bạn nhìn vào mã nguồn FileUtils, trong sao chép nó tạo ra file mới như thế này

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

các quyền tập tin không được bảo quản. Và trong quá trình sao chép thực tế các byte được sao chép theo lô (được đệm) và được ghi vào tệp mới.

nhưng, bạn có thể đợi một vài ngày hoặc sử dụng bản phát hành xem trước của JDK7 có apis để cho phép điều này có thể thực hiện được.

5

Các bổ sung Hệ thống tập tin sắp tới trong Java 7 sẽ giúp ích. Nhìn vào JSR-203. Nếu bạn đang sử dụng Linux, bạn có thể sử dụng backport với Java 6.

API mới mà bạn muốn là: Files.copy(Path, Path, CopyOptions). Lưu ý rằng CopyOptionsCOPY_ATTRIBUTES, sẽ thực hiện những gì bạn muốn.

Các vấn đề liên quan