JAVA学习-笔记15-文件目录权限

java 为文件添加权限
//增加权限,使路径可上传文件
public static void addChmod777(String filePath) throws IOException {
     if (!System.getProperty("os.name").startsWith("Win")) {
         String cmdGrant = "chmod 777 " + filePath;
         BaseLogMethod.logInfo(TAG, "File Augmentation after Moving:" + cmdGrant);
         Runtime.getRuntime().exec(cmdGrant);
     }
}

java 为文件夹添加权限
//增加权限,使路径及子路径都有权限
public static void addRChmod777(String filePath) throws IOException {
     if (!System.getProperty("os.name").startsWith("Win")) {
         String cmdGrant = "chmod -R 777 " + filePath;
         BaseLogMethod.logInfo(TAG, ".addRChmod777: File Augmentation after Moving:" + cmdGrant);
         Runtime.getRuntime().exec(cmdGrant);
     }
}


java 修改文件所有者及其权限
1.设置所有者
管理文件所有者
Files.getOwner()和Files.setOwner()方法
要使用UserPrincipal来管理文件的所有者
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条目
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();
    }
}

(2)为指定用户添加新的ACL条目
e:/test1.txt为用户abc添加DATA_READ和DATA_ WRITE权限
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();
    }
}

3.POSIX文件权限
UNIX支持POSIX标准文件属性
PosixFilePermission枚举类型定义九个常量,每个权限组件一个。
九个常数命名为X_Y,其中X是OWNER,GROUP和OTHERS,Y是READ,WRITE和EXECUTE。
PosixFilePermissions的toString()方法将一组PosixFilePermission枚举常量转换为rwxrwxrwx形式的字符串
PosixFileAttributeView的setPermissions()方法用来设置权限
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();
    }
}

(2)读取和更新名为test的文件权限
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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值