在Java中创建文件时设置POSIX权限

在Java中创建文件时设置POSIX权限,java,file,posix,Java,File,Posix,有没有一种方法可以创建具有给定POSIX权限集的文件 一旦文件存在,就可以为该文件设置POSIX权限。下面的代码就是这样做的。然而,该代码也有一个文件竞赛,在这个竞赛中,文件被打开时可能是松散的权限创建,我随后将其锁定。在这两者之间,可能有人修改了文件,导致了问题。如何在创建时设置权限 Set<PosixFilePermission> perms = EnumSet.of(PosixFilePermission.OWNER_READ,

有没有一种方法可以创建具有给定POSIX权限集的文件

一旦文件存在,就可以为该文件设置POSIX权限。下面的代码就是这样做的。然而,该代码也有一个文件竞赛,在这个竞赛中,文件被打开时可能是松散的权限创建,我随后将其锁定。在这两者之间,可能有人修改了文件,导致了问题。如何在创建时设置权限

    Set<PosixFilePermission> perms = 
             EnumSet.of(PosixFilePermission.OWNER_READ, 
                        PosixFilePermission.OWNER_WRITE);       
    Path targetPath = dir.resolve(FILENAME);
    String contents = getContent();
    try {//  CREATION, race starts
        try (FileWriter fw = new FileWriter(tempPath.toFile())) {
            fw.append(contents);
        }
        //  SECURED, race ends
        Files.setPosixFilePermissions(tempPath, perms);
    ...

原来还有另一个POSIX接口:您可以将其传递给Files.createFile

见以下章节:

设置初始权限

Implementations supporting this attribute view may also 
support setting the initial permissions when creating a file or directory.
将以下路径传递给FileWriter是正确的:

Path lockedFile = Files.createFile(tempPath,
                                  PosixFilePermissions.asFileAttribute(perms));
try (FileWriter fw = new FileWriter(lockedFile.toFile())) {
 ...