2009-02-19 31 views
10

Tôi tạo một thư mục trong chương trình java của mình (chạy trên Linux) với hàm mkdirs() của đối tượng Tệp. Vấn đề là thư mục chỉ nhận quyền đọc cho nhóm. Tôi cần nó cũng có quyền ghi (để có thể xóa các tập tin của nó sau này). Cách để làm điều đó là gì?Tạo thư mục có quyền ghi cho nhóm

Trả lời

-1

Trên java 6, có các phương pháp cho phép bạn thực hiện việc này, như setwriteable(). Trên các phiên bản trước của java, bạn sẽ phải truy cập vào dòng lệnh để thực hiện lệnh chmod.

Java 6 SE File Class Doc.

EDIT: Woops, tôi hoàn toàn sai; Tôi không nhận thấy rằng bạn muốn có quyền của nhóm cụ thể. Những người không xuất hiện để được settable mà không có Runtime.exec().

@David: Bạn nói đúng.

Một ý nghĩ khác: nếu bạn có nhiều tệp cần thay đổi, cách viết một kịch bản lệnh shell và gọi nó từ runtime.exec()?

1

Tôi nghi ngờ (trừ khi/cho đến khi ai đó đăng câu trả lời ngược lại) rằng không có cách nào để thực hiện điều này trong thư viện chuẩn của Java, vì quyền nhóm POSIX (loại rwxrwxrwx mà bạn quen) không phải là nền tảng chéo. Java 6 sẽ cho phép bạn đặt quyền của chủ sở hữu hoặc quyền toàn cầu, nhưng (theo như tôi có thể biết) không được phép nhóm. Nếu bạn thực sự phải làm điều đó, hãy thử sử dụng Runtime.exec("chmod g+w directory"), nhưng nó có thể là một ý tưởng tốt về mặt phong cách để bọc nó theo một phương thức như setGroupWritable().

+0

Nó không phải là tốt đẹp, nhưng không làm việc. Chỉ cần cho Copy/Paste: Nó phải là Runtime.getRuntime.exec ("chmod g + w directory") – schoenk

0

OK đây không phải là giải pháp java và chắc chắn không di động.

Vì bạn đề cập rằng bạn là linux, có thể bạn sẽ kiểm tra cài đặt "umask" và cài đặt thích hợp (để có thư mục được tạo bằng quyền ghi nhóm) và sau đó khởi chạy chương trình java của bạn.

16

Một giải pháp rất đơn giản cho điều này là:

file.setExecutable(true, false); 
file.setReadable(true, false); 
file.setWritable(true, false); 

Trong đoạn mã trên, tập tin là một đối tượng tập tin.

Khi bạn tạo tệp, các quyền này thành tệp setExecutable(true) sẽ cho phép bạn đặt tệp đó là Executable chỉ dành cho chủ sở hữu. Nếu bạn thêm một thông số khác mà tôi đã thêm vào ở trên mã file.setExecutable(true, false); sẽ làm cho Executablefalse chỉ dành cho chủ sở hữu, điều đó có nghĩa là nó sẽ đặt quyền cho tất cả nhóm/thế giới.

Đã thử nghiệm và làm việc trên Debian và Windows XP.

+2

một giải pháp tốt hơn là sử dụng java nio vì giải pháp này đặt quyền cho chủ sở hữu duy nhất hoặc cho tất cả. – Nurlan

+0

Điều này không hiệu quả đối với tôi. Tôi đã cố gắng tạo thư mục dưới thư mục gốc (trên linux) với ứng dụng java (người dùng là tomcat) nhưng nó không thành công ngay cả khi tôi sử dụng 'if (! RootFile.canWrite()) { rootFile.setWritable (true, true); } ' dường như với tôi rằng người dùng tomcat không thể thay đổi quyền trên dir/tệp – pikimota

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