【问题标题】:Write permissions not getting set when using NIO on unix在 unix 上使用 NIO 时未设置写权限
【发布时间】:2014-10-30 09:50:40
【问题描述】:

我正在使用 NIO 设置路径中所有目录的权限,如下所示。我正在尝试授予 777 权限,但是“w”部分没有得到应用...这里有什么问题?

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;

public class permissionTest {

    public static void main(String [] args) throws IOException{

        Path dirPath = Paths.get("./part1/part2/part3");


        Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rwxrwxrwx");
        System.out.print(permissions.toString() + ' ');

        FileAttribute<Set<PosixFilePermission>> fileAttributes = 

                PosixFilePermissions.asFileAttribute(permissions);

        Files.createDirectories(dirPath, fileAttributes);

    }

}

$ ls -ld part1/
drwxr-xr-x 3 * *4096 Oct 30 02:48 part1/

【问题讨论】:

    标签: java permissions nio 777


    【解决方案1】:

    这是因为应用了 umask。

    尝试在 shell 中输入:

    umask 0
    

    然后重新运行您的程序(或从命令行启动您的 IDE 并运行代码)。这也意味着如果您执行umask 027,您创建的目录的权限将为750。

    不幸的是,您无法在 Java 本身中更改进程的 umask(因为这是每个进程,并且是继承的)...


    注意有this method可以设置“绝对”文件权限。

    【讨论】:

    • 那么,我们可以使用 chmod -R 但我们不能在 Java 中这样做?
    • 您可以递归地更改权限,是的。为此,您需要实现FileVisitor
    • 注意:自从这个消息以来,我已经开始实施this;计划使用递归 chmod。欢迎投稿!
    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 2014-08-21
    • 2013-09-09
    • 2010-12-23
    • 2018-12-06
    • 2016-06-08
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多