【问题标题】:How can I set the umask from within java?如何从 java 中设置 umask?
【发布时间】:2018-09-10 04:08:54
【问题描述】:

我是 Java 新手。 umask在api中暴露在哪里?

【问题讨论】:

    标签: java file-permissions


    【解决方案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 库;例如

    这种方法的问题在于它本质上是不可移植的(不能在不符合 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())
      

      【讨论】:

      • 不,这是设置文件的权限,而不是设置掩码。
      猜你喜欢
      • 2011-03-11
      • 2019-07-30
      • 2011-10-28
      • 2012-04-30
      • 1970-01-01
      • 2012-07-20
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多