• java修改文件所有者及其权限


    1.设置所有者

    管理文件所有者

    Files.getOwner()和Files.setOwner()方法

    要使用UserPrincipal来管理文件的所有者

    (1)更改文件的所有者

    import java.io.IOException;
    import java.nio.file.*;
    import java.nio.file.attribute.FileOwnerAttributeView;
    import java.nio.file.attribute.UserPrincipal;
    import java.nio.file.attribute.UserPrincipalLookupService;
    
    public class Main {
        public static void main(String[] args) {
    
            Path path = Paths.get("/www/test1.txt");
    
            FileOwnerAttributeView foav = Files.getFileAttributeView(path,
                    FileOwnerAttributeView.class);
            try {
                UserPrincipal owner = foav.getOwner();
                System.out.format("Original owner  of  %s  is %s%n", path,
                        owner.getName());
    
                FileSystem fs = FileSystems.getDefault();
                UserPrincipalLookupService upls = fs.getUserPrincipalLookupService();
    
                UserPrincipal newOwner = upls.lookupPrincipalByName("abc");
                foav.setOwner(newOwner);
    
                UserPrincipal changedOwner = foav.getOwner();
                System.out.format("New owner  of  %s  is %s%n", path,
                        changedOwner.getName());
    
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    }

    输出

    查看文件详细信息

    2.ACL文件权限

    Windows上支持ACL类型文件属性

    使用AclFileAttributeView的

      getAcl()方法获取文件的AclEntry列表

      setAcl()方法设置文件的AclEntry列表

    (1)读取文件e:/test1.txt的ACL条目

    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.attribute.AclEntry;
    import java.nio.file.attribute.AclEntryPermission;
    import java.nio.file.attribute.AclFileAttributeView;
    import java.util.List;
    import java.util.Set;
    
    public class Main {
        public static void main(String[] args) {
           
            Path path = Paths.get("e:/test1.txt");
            AclFileAttributeView aclView = Files.getFileAttributeView(path,
                    AclFileAttributeView.class);
            if (aclView == null) {
                System.out.format("ACL view  is not  supported.%n");
                return;
            }
            try {
                List<AclEntry> aclEntries = aclView.getAcl();
                for (AclEntry entry : aclEntries) {
                    System.out.format("Principal: %s%n", entry.principal());
                    System.out.format("Type: %s%n", entry.type());
                    System.out.format("Permissions are:%n");
    
                    Set<AclEntryPermission> permissions = entry.permissions();
                    for (AclEntryPermission p : permissions) {
                        System.out.format("%s %n", p);
                    }
    
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }

    输出结果为

    Principal: BUILTINAdministrators (Alias)
    Type: ALLOW
    Permissions are:
    WRITE_DATA 
    WRITE_OWNER 
    APPEND_DATA 
    SYNCHRONIZE 
    WRITE_ATTRIBUTES 
    EXECUTE 
    READ_DATA 
    DELETE_CHILD 
    READ_ATTRIBUTES 
    WRITE_NAMED_ATTRS 
    WRITE_ACL 
    DELETE 
    READ_ACL 
    READ_NAMED_ATTRS 
    Principal: NT AUTHORITYSYSTEM (Well-known group)
    Type: ALLOW
    Permissions are:
    WRITE_DATA 
    WRITE_OWNER 
    APPEND_DATA 
    SYNCHRONIZE 
    WRITE_ATTRIBUTES 
    EXECUTE 
    READ_DATA 
    DELETE_CHILD 
    READ_ATTRIBUTES 
    WRITE_NAMED_ATTRS 
    WRITE_ACL 
    DELETE 
    READ_ACL 
    READ_NAMED_ATTRS 
    Principal: NT AUTHORITYAuthenticated Users (Well-known group)
    Type: ALLOW
    Permissions are:
    WRITE_DATA 
    READ_ATTRIBUTES 
    APPEND_DATA 
    WRITE_NAMED_ATTRS 
    SYNCHRONIZE 
    WRITE_ATTRIBUTES 
    EXECUTE 
    DELETE 
    READ_DATA 
    READ_ACL 
    READ_NAMED_ATTRS 
    Principal: BUILTINUsers (Alias)
    Type: ALLOW
    Permissions are:
    READ_ATTRIBUTES 
    SYNCHRONIZE 
    EXECUTE 
    READ_DATA 
    READ_ACL 
    READ_NAMED_ATTRS 
    View Code

    (2)为指定用户添加新的ACL条目

    e:/test1.txt为用户abc添加DATA_READ和DATA_ WRITE权限

    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.attribute.*;
    import java.util.EnumSet;
    import java.util.List;
    import java.util.Set;
    
    import static java.nio.file.attribute.AclEntryPermission.READ_DATA;
    import static java.nio.file.attribute.AclEntryPermission.WRITE_DATA;
    
    public class Main {
        public static void main(String[] args) {
            
            Path path = Paths.get("e:/test1.txt");
            AclFileAttributeView aclView = Files.getFileAttributeView(path,
                    AclFileAttributeView.class);
            if (aclView == null) {
                System.out.format("ACL view  is not  supported.%n");
                return;
            }
            try {
    
                UserPrincipal bRiceUser = FileSystems.getDefault()
                        .getUserPrincipalLookupService().lookupPrincipalByName("abc");
    
                Set<AclEntryPermission> permissions = EnumSet.of(READ_DATA, WRITE_DATA);
    
                AclEntry.Builder builder = AclEntry.newBuilder();
                builder.setPrincipal(bRiceUser);
                builder.setType(AclEntryType.ALLOW);
                builder.setPermissions(permissions);
                AclEntry newEntry = builder.build();
    
                List<AclEntry> aclEntries = aclView.getAcl();
    
                aclEntries.add(newEntry);
    
                aclView.setAcl(aclEntries);
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    输出结果比刚才多了

    Principal: hkgi-PCabc (User)
    Type: ALLOW
    Permissions are:
    WRITE_DATA
    READ_DATA

    3.POSIX文件权限

    UNIX支持POSIX标准文件属性

    PosixFilePermission枚举类型定义九个常量,每个权限组件一个。

    九个常数命名为X_Y,其中X是OWNER,GROUP和OTHERS,Y是READ,WRITE和EXECUTE。

    PosixFilePermissions的toString()方法将一组PosixFilePermission枚举常量转换为rwxrwxrwx形式的字符串

    PosixFileAttributeView的setPermissions()方法用来设置权限

    (1)输出/www/test1.txt的权限

    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.attribute.*;
    import java.util.Set;
    
    public class Main {
        public static void main(String[] args) {
    
            Path path = Paths.get("/www/test1.txt");
            PosixFileAttributeView posixView = Files.getFileAttributeView(path,
                    PosixFileAttributeView.class);
            try{
                PosixFileAttributes attribs = posixView.readAttributes();
                Set<PosixFilePermission> permissions = attribs.permissions();
                // Convert the file permissions into the rwxrwxrwx string form
                String rwxFormPermissions = PosixFilePermissions.toString(permissions);
                // Print the permissions
                System.out.println(rwxFormPermissions);
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    }

    输出结果

    rw-r--r--

    (2)读取和更新名为test的文件权限

    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.attribute.*;
    import java.util.EnumSet;
    import java.util.Set;
    
    import static java.nio.file.attribute.PosixFilePermission.*;
    
    public class Main {
        public static void main(String[] args) {
    
            Path path = Paths.get("/www/test1.txt");
            PosixFileAttributeView posixView = Files.getFileAttributeView(path,
                    PosixFileAttributeView.class);
    
            if (posixView == null) {
                System.out.format("POSIX attribute view  is not  supported%n.");
                return;
            }
            System.out.println("old:");
            readPermissions(posixView);
            updatePermissions(posixView);
            System.out.println("new:");
            readPermissions(posixView);
    
        }
    
        public static void readPermissions(PosixFileAttributeView posixView) {
            try{
                PosixFileAttributes attribs;
                attribs = posixView.readAttributes();
                Set<PosixFilePermission> permissions = attribs.permissions();
                // Convert the set of posix file permissions into rwxrwxrwx form
                String rwxFormPermissions = PosixFilePermissions.toString(permissions);
                System.out.println(rwxFormPermissions);
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
        public static void updatePermissions(PosixFileAttributeView posixView) {
            try {
                Set<PosixFilePermission> permissions = EnumSet.of(OWNER_READ, OWNER_WRITE,OWNER_EXECUTE,
                        GROUP_READ,GROUP_WRITE);
                posixView.setPermissions(permissions);
                System.out.println("Permissions set successfully.");
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    输出结果

    old:
    rw-r-----
    Permissions set successfully.
    new:
    rwxrw----

  • 相关阅读:
    需求分析与系统设计(二)阅读笔记
    阅读笔记:需求分析与系统设计(一)
    css方法div固定在网页底部
    阅读笔记:软件需求十步走(三)
    剑指offer 二维数组中的查找
    剑指offer 替换空格
    剑指offer 重建二叉树
    git常用操作
    关于 IO的同步异步间要描述
    svn-代码回滚
  • 原文地址:https://www.cnblogs.com/baby123/p/11122289.html
Copyright © 2020-2023  润新知