如何在 java 中设置 umask?
Posted
技术标签:
【中文标题】如何在 java 中设置 umask?【英文标题】:How can I set the umask from within java? 【发布时间】:2011-03-11 15:47:33 【问题描述】:我是 Java 新手。 umask在api中暴露在哪里?
【问题讨论】:
【参考方案1】:您不能直接使用 umask,因为 Java 是一种抽象,而 umask 是特定于 POSIX 实现的。但是您有以下 API:
File f;
f.setExecutable(true);
f.setReadable(false);
f.setWritable(true);
还有更多可用的 API,check the docs。
如果您必须直接访问 umask,要么通过 JNI 和 chmod()
系统调用来实现,要么使用 exec("chmod")
生成一个新进程。
【讨论】:
嗯,很有趣,谢谢。我想我可以使用 JNI 调用 umask(2),然后呢? @eeee 当然,但是你必须将你的 JNI 模块部署到你想要支持的所有平台上,因为它几乎根据定义依赖于平台。 @extraneon 是的,当然。老实说,我很惊讶没有人为 Java 制作一个暴露所有 posix 接口的模块。我的意思是,这不可能——对吧?没有这种东西,人们如何在java中执行系统活动? @eeee 新的 API 将在 Java 7 中出现(尚未发布),在包java.nio.file
中。
准确地说:在包中java.nio.file.attribute
。【参考方案2】:
java.nio.file.attribute.PosixFileAttributes
在 Java SE 7 中。
【讨论】:
我没有找到任何专门设置umask的函数,只有文件权限。【参考方案3】:另一种方法是使用公开 POSIX 系统调用的第 3 方 Java 库;例如
Jtux "Posix for Java" 库, 等等(Google 为“java posix library”)。这种方法的问题在于它本质上是不可移植的(不能在不符合 POSIX 的平台上工作),并且需要特定于平台的本机库......以及所有这些。
【讨论】:
【参考方案4】: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 中设置 umask?的主要内容,如果未能解决你的问题,请参考以下文章