2010-07-04 6 views

Trả lời

11

Bạn không thể nói chuyện trực tiếp với umask, vì Java là một trừu tượng và umask là thực thi POSIX cụ thể. Nhưng bạn có API sau:

File f; 
f.setExecutable(true); 
f.setReadable(false); 
f.setWritable(true); 

Có một số API khác, check the docs.

Nếu bạn phải có quyền truy cập trực tiếp đến umask, hoặc làm điều đó thông qua JNI và chmod() syscall, hoặc đẻ trứng một quá trình mới với exec("chmod").

+0

Hm thú vị, cảm ơn. Tôi đoán tôi có thể sử dụng JNI để gọi umask (2), sau đó? – eeee

+0

@eeee chắc chắn, nhưng bạn phải triển khai mô-đun JNI của mình cho tất cả các nền tảng bạn muốn hỗ trợ, vì nó gần như phụ thuộc vào nền tảng định nghĩa. – extraneon

+0

@extraneon có, tất nhiên. Thành thật mà nói, tôi rất ngạc nhiên khi không có ai tạo ra một mô-đun cho Java phơi bày tất cả các giao diện posix. Ý tôi là, điều đó không thể đúng - đúng không? Làm thế nào để mọi người thực hiện các hoạt động hệ thống trong java mà không có loại điều này? – eeee

1

java.nio.file.attribute.PosixFileAttributes trong Java SE 7.

+1

Tôi không tìm thấy bất kỳ chức năng nào để cài đặt umask cụ thể, chỉ cho phép các tập tin. – Nakedible

+0

@Nakedible Yes. –

0

phương pháp khác là sử dụng một thư viện Java của bên thứ 3 đó cho thấy nhiều POSIX cuộc gọi hệ thống; ví dụ.

Vấn đề với phương pháp này là bản chất không di động (không hoạt động trên nền tảng tuân thủ không POSIX) và yêu cầu thư viện gốc cụ thể cho nền tảng ... và tất cả những gì đòi hỏi.