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
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.
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()?
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()
.
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.
Java nio có thể giúp với tập tin posix thuộc tính: http://openjdk.java.net/projects/nio/javadoc/java/nio/file/attribute/PosixFileAttributeView.html
Path path = ...
Set<PosixFilePermission> perms =
EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_WRITE);
Files.createFile(path, PosixFilePermissions.asFileAttribute(perms));
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 Executable
false
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.
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
Đ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
- 1. Cách tạo tệp trong thư mục Linux với quyền ghi nhóm mặc định
- 2. làm cách nào để tạo tệp có file_put_contents có quyền ghi nhóm?
- 3. WIX: Cấp quyền cho một thư mục
- 4. Quyền đọc/ghi trên Android của một thư mục
- 5. Đặt quyền ghi cho tất cả người dùng cho thư mục chương trình của tôi
- 6. Linux: Chỉ đặt quyền cho các thư mục
- 7. Kiểm tra quyền truy cập ghi trong thư mục trước khi tạo tệp bên trong thư mục
- 8. Liệu python logging.handlers.RotatingFileHandler có cho phép tạo một tệp nhật ký có thể ghi nhóm không?
- 9. Tạo chỉ mục cho nhóm theo trường?
- 10. Các phương pháp hay nhất về quyền trên thư mục có thể ghi Apache là gì?
- 11. Linux/opt/* thư mục và quyền
- 12. C# Tệp/Thư mục Quyền
- 13. Đặt quyền mặc định cho các tệp và thư mục con mới được tạo trong thư mục trong Linux?
- 14. Làm thế nào để bạn thiết lập một thư mục để có quyền truy cập nhóm liên tục?
- 15. Quyền nào cho tập lệnh/thư mục PHP?
- 16. Quyền triển khai và thư mục web
- 17. Kịch bản Powershell tạo thư mục nhà cho người dùng và quyền thiết lập
- 18. Trong .NET, hãy kiểm tra xem người dùng hiện tại có thể ghi vào thư mục
- 19. Hiểu về quyền hạn thư mục Linux
- 20. Trình cài đặt Nullsoft, cách làm cho thư mục con ProgramData có thể ghi
- 21. Kẹp giấy tạo thư mục có các quyền không chính xác
- 22. vấn đề quyền ghi tập tin trong thư mục "Program Files"
- 23. Cách git xử lý quyền thư mục?
- 24. Tạo một thư mục con cho tất cả các thư mục trong thư mục
- 25. Nhóm thư mục hợp lý Eclipse
- 26. Cách tạo thư mục/thư mục
- 27. Tạo bản ghi truy cập cho thư mục con khác nhau trong Apache
- 28. Quyền đối với thư mục trong các trang web Azure
- 29. Đọc Quyền đối với thư mục trong C#
- 30. Bảo mật đúng cách thư mục đọc/ghi IIS 7
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