程式扎記: [ Java 代碼範本 ] JDK 7 » File Attribute » Using PosixFileAttributes

標籤

2015年2月16日 星期一

[ Java 代碼範本 ] JDK 7 » File Attribute » Using PosixFileAttributes

Source From Here 
Preface 
在 Linux/Unix 中你可以透過 chmod 命令來變更檔案的屬性, 在 JDK7 之後提供了類別 PosixFileAttributes 讓你讀取與設定檔案的屬性. 

Sample Code 
下面的範例代碼讓你從命令列參數輸入一個檔案的路徑, 程式會讀出該檔案的屬性並重置該檔案屬性為 0644: 
  1. package john.nio.file.attribute;  
  2.   
  3. import java.nio.file.Files;  
  4. import java.nio.file.Path;  
  5. import java.nio.file.Paths;  
  6. import java.nio.file.attribute.PosixFileAttributes;  
  7. import java.nio.file.attribute.PosixFilePermission;  
  8. import static java.nio.file.attribute.PosixFilePermission.*;  
  9. import java.nio.file.attribute.PosixFilePermissions;  
  10. import java.util.Set;  
  11.   
  12. public class PosixFileAttributesDemo {  
  13.     public static void main(String args[]) throws Exception  
  14.     {  
  15.         if(args.length==0)   
  16.         {  
  17.             System.out.printf("\t[Info] Usage: Arg1=File Path\n");  
  18.             return;  
  19.         }  
  20.         Path profile = Paths.get(args[0]);  
  21.   
  22.         PosixFileAttributes attrs = Files.readAttributes(profile,  
  23.             PosixFileAttributes.class);  
  24.   
  25.         Set posixPermissions = attrs.permissions();        
  26.   
  27.         String owner = attrs.owner().getName();  
  28.         String perms = PosixFilePermissions.toString(posixPermissions);  
  29.         System.out.printf("\t[Info] File=%s with permission: ", args[0]);  
  30.         System.out.format("%s %s%n", owner, perms);  
  31.   
  32.         posixPermissions.clear();                 
  33.         posixPermissions.add(OWNER_READ);  
  34.         posixPermissions.add(OWNER_WRITE);  
  35.         posixPermissions.add(GROUP_READ);  
  36.         posixPermissions.add(OTHERS_READ);  
  37.         System.out.printf("\t[Info] Reset permission to: %s\n", PosixFilePermissions.toString(posixPermissions));  
  38.         Files.setPosixFilePermissions(profile, posixPermissions);  
  39.     }  
  40. }  
上面代碼透過 enum PosixFilePermission 進行屬性設定: 
 

Execution 
假設你將上面代碼封裝到 Test.jar 中, 並設定 main-class 為 PosixFileAttributesDemo, 下面為執行過程: 
$ chmod 777 test.py
$ ls -hl test.py
-rwxrwxrwx. 1 root root 890 Jan 1 13:13 test.py
$ java -jar Test.jar test.py # 執行我們的範例代碼
[Info] File=test.py with permission: root rwxrwxrwx
[Info] Reset permission to: rw-r-----

$ ls -hl test.py
-rw-r-----. 1 root root 890 Jan 1 13:13 test.py

Supplement 
Stackoverflow - How can I set the umask from within java? 
Linux Files and File Permission

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!