I'm new to Java. Where is umask exposed in the api?
You can't fiddle with the umask directly, since Java is an abstraction and the umask is POSIX-implementation specific. But you have the following API:
File f;
f.setExecutable(true);
f.setReadable(false);
f.setWritable(true);
There are some more APIs available, check the docs.
If you must have direct access to the umask, either do it via JNI and the chmod()
syscall, or spawn a new process with exec("chmod")
.
import java.nio.file.Files
import java.nio.file.attribute.PosixFilePermission
File file = new File("/some/path")
Files.setPosixFilePermissions(file.toPath(), [
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE
].toSet())
java.nio.file.attribute.PosixFileAttributes
in Java SE 7.
Another approach is to use a 3rd-party Java library that exposes POSIX system calls; e.g.
- Jtux
- The "Posix for Java" library,
- and so on (Google for "java posix library").
The problem with this approach is that it is intrinsically non-portable (won't work on a non-POSIX compliant platform), and requires a platform-specific native library ... and all that that entails.
精彩评论