POSIX View

POSIX View 無庸置疑,是為 Unix like 準備的! 來看看程式吧 ~

 1 package idv.steven.nio2.metadata;
 2 
 3 import java.io.IOException;
 4 import java.nio.file.Files;
 5 import java.nio.file.Path;
 6 import java.nio.file.Paths;
 7 import java.nio.file.attribute.GroupPrincipal;
 8 import java.nio.file.attribute.PosixFileAttributeView;
 9 import java.nio.file.attribute.PosixFileAttributes;
10 import java.nio.file.attribute.PosixFilePermission;
11 import java.nio.file.attribute.PosixFilePermissions;
12 import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
13 import java.util.Set;
14 
15 public class POSIXView {
16 
17     public static void main(String[] args) {
18         PosixFileAttributes attr = null;
19         Path path = Paths.get("/home/steven/seal/steven.pub");
20         
21         // read permissions
22         try {
23             attr = Files.readAttributes(path, PosixFileAttributes.class);
24         } catch (IOException e) {
25             System.err.println(e.getMessage());
26         }
27 
28         System.out.println("File owner: " + attr.owner().getName());
29         System.out.println("File group: " + attr.group().getName());
30         System.out.println("File permissions: " + attr.permissions().toString());
31         
32         // set permissions
33         Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rw-r--r--");
34         try {
35             Files.setPosixFilePermissions(path, permissions);
36             
37             GroupPrincipal group = path.getFileSystem().
38                     getUserPrincipalLookupService().lookupPrincipalByGroupName("steven");
39                     Files.getFileAttributeView(path, PosixFileAttributeView.class).setGroup(group);
40                     
41             GroupPrincipal groupSteven = (GroupPrincipal) Files.getAttribute(path, "posix:group", NOFOLLOW_LINKS);
42             System.out.println(group.getName());
43         } catch (IOException e) {
44             System.err.println(e);
45         }
46     }
47 }

 

解釋程式前,先看一下輸出結果 ...

File owner: steven
File group: steven
File permissions: [OTHERS_READ, OWNER_WRITE, GROUP_WRITE, OWNER_READ, GROUP_READ]

執行後,steven.pub 的權限如下圖:

程式說明如下:

  • 22 ~ 30 行: 讀取檔案的權限,包括檔案的擁有者、群組及讀、寫、執行的權限,這裡的 file permissions 不是用 unix 使用者習慣的 664,而是以文字來表示。
  • 33 ~ 35 行: 設定檔案的權限,設定後權改為 644。
  • 37 ~ 45 行: 變更檔案所屬的群組,當然啦~ 這個群組要是 OS 中已經存在的,且是目前執行的這支程式的帳號有權限可以變更的。

 如果想要在 Unix/Linux 中建立一個目錄,並設定適當的權限,該怎麼做? 如下:

        Path newFolder = FileSystems.getDefault().getPath("/home/steven/newFolder");
        Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
        FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);
        
        try {
            Files.createDirectory(newFolder, attr);
        } catch (IOException e) {
            System.err.println(e);
        }

先使用 PosixFilePermissions 設定好權限,再用 createDirectory 建立目錄。

posted @ 2015-07-19 13:40  史帝芬@Taiwan  阅读(120)  评论(0编辑  收藏  举报