2014-12-05 103 views
0

有沒有辦法用一組給定的POSIX權限創建一個文件?在Java文件創建時設置POSIX權限

一旦文件存在,就可以爲文件設置POSIX權限。下面的代碼是這樣做的。但是,該代碼還具有文件競爭,其中文件以可以是鬆散許可(CREATION)的方式打開,然後我鎖定(SECURED)。在某人之間可能修改了文件,導致問題。我如何在創建時設置權限?

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); 
    ... 

回答

0

原來還有另一個POSIX接口:PosixFileAttributeView,你可以把它傳遞給Files.createFile()

請參閱部分Setting Intial Permissions

設置初始權限

Implementations supporting this attribute view may also 
support setting the initial permissions when creating a file or directory. 

將下面的路徑傳遞給Fil eWriter做正確的事情:

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