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 建立目錄。
沒有留言:
張貼留言