为啥在 Java 7 中未正确设置文件写入权限?

Posted

技术标签:

【中文标题】为啥在 Java 7 中未正确设置文件写入权限?【英文标题】:Why file writing permission is not set correctly in Java 7?为什么在 Java 7 中未正确设置文件写入权限? 【发布时间】:2013-06-08 21:30:28 【问题描述】:

有人可以解释一下,为什么在 Ubuntu 13.04 和 java 1.7(OpenJDK 64 位)上的以下代码 sn-p 没有为其他人设置写入权限。其他所有权限都设置正确,除了写给别人,我认为这是可疑的。

public void testCreateFileWithPermissions() throws IOException 
    Path target = Paths.get(TEST_FILE);
    cadf.createFileWithPermissions(target, "rwxrwxrwx");
    Set<PosixFilePermission> perms = Files.getPosixFilePermissions(target);
    for (PosixFilePermission perm : perms) 
      System.out.println(perm.toString());
    
  

public void createFileWithPermissions(Path target, String permissions)
      throws IOException 
    Set<PosixFilePermission> perms = PosixFilePermissions
        .fromString(permissions);
    FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions
        .asFileAttribute(perms);
    Files.createFile(target, attr);
  

我得到以下输出:

OWNER_WRITE
OTHERS_EXECUTE
GROUP_READ
OWNER_READ
GROUP_EXECUTE
GROUP_WRITE
OWNER_EXECUTE
OTHERS_READ

【问题讨论】:

可能是 umask ?...您的环境中的 umask 是什么。 谢谢!你是对的,我的 umask 是0002。我不知道 umask 和它的功能。 【参考方案1】:

根据 CPU 100 的评论,我快速搜索了umask,结果发现我使用的是默认值,即0002。因此,我无法为其他用户创建任何具有写入权限的文件。 这是umask的一个很好的解释。

【讨论】:

【参考方案2】:

由于我无法更改 umask,因此我在创建文件后使用 Files.setPosixFilePermissions(Path, Set&lt;PosixFilePermission&gt;)

【讨论】:

在ubuntu上换了umask还是不行

以上是关于为啥在 Java 7 中未正确设置文件写入权限?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 bash if 语句中未设置的变量被评估为 0

Linux主机安装网站系统时目录写入权限已经设置为777为啥还显示不可写呢?

为啥在 LibreOffice Calc 中未正确检测到单元格增量

为啥 Apache + PHP 需要执行权限才能写入文件?

任何人都知道为啥我会收到“快照侦听器中未捕获的错误:FirebaseError:缺少权限或权限不足”吗?

为啥C盘不能存入文件,提示权限不足,要与管理员联系?