zoukankan      html  css  js  c++  java
  • JDK 1.7当中的文件属性、权限操作

    在JDK1.7当中新增了对文件操作的一些API接口,此Demo特点:

    • 读取文件的属性
    • 读取文件的权限,RWX格式,Number格式
    • 修改文件的权限
    • 权限格式的转换:RWX格式与Number格式

    二次修改说明:

    • 参数命名 首字母小写
    • 添加异常捕获,需要引用第三方apache BizCoreException jar包
    
    package com.idcos.cloud.core.common.util;
    
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.FileSystem;
    import java.nio.file.Files;
    import java.nio.file.attribute.GroupPrincipal;
    import java.nio.file.attribute.PosixFileAttributeView;
    import java.nio.file.attribute.PosixFileAttributes;
    import java.nio.file.attribute.PosixFilePermission;
    import java.nio.file.attribute.PosixFilePermissions;
    import java.nio.file.attribute.UserPrincipal;
    import java.nio.file.attribute.UserPrincipalLookupService;
    import java.util.Set;
    
    import com.idcos.common.biz.BizCoreException;
    
    public class FileAttributesUtil {
    
        /**
         * 获取文件系统信息
         * @param file
         * @return
         */
        public static FileSystem getFileSystem(File file) {
            return file.toPath().getFileSystem();
        }
    
        public static UserPrincipalLookupService getUserPrincipalLookupService(File file) {
            return getFileSystem(file).getUserPrincipalLookupService();
        }
    
        public static GroupPrincipal getGroupPrincipal(File file, String groupName) {
            try {
                return getUserPrincipalLookupService(file).lookupPrincipalByGroupName(groupName);
            } catch (IOException e) {
                throw new BizCoreException("获取group名称:" + groupName + "异常", e);
            }
        }
    
        public static UserPrincipal getUserPrincipal(File file, String userName) {
            try {
                return getUserPrincipalLookupService(file).lookupPrincipalByName(userName);
            } catch (IOException e) {
                throw new BizCoreException("获取user名称:" + userName + "异常", e);
            }
        }
    
        public static PosixFileAttributeView getPosixFileAttributeView(File file) {
            return Files.getFileAttributeView(file.toPath(), PosixFileAttributeView.class);
        }
    
        public static PosixFileAttributes getPosixFileAttributes(File file) {
            try {
                return getPosixFileAttributeView(file).readAttributes();
            } catch (IOException e) {
                throw new BizCoreException("获取文件属性异常", e);
            }
        }
    
        /**
         * 修改文件用户组
         * @param file 文件
         * @param groupName 用户组名称
         * @throws IOException
         */
        public static void setFileGroup(File file, String groupName) {
            try {
                getPosixFileAttributeView(file).setGroup(getGroupPrincipal(file, groupName));
            } catch (IOException e) {
                throw new BizCoreException("写入文件group信息异常", e);
            }
    
        }
    
        /**
         * 修改文件用户
         * @param file 文件
         * @param userName 用户名称
         * @throws IOException
         */
        public static void setFileUser(File file, String userName) {
            try {
                getPosixFileAttributeView(file).setOwner(getUserPrincipal(file, userName));
            } catch (IOException e) {
                throw new BizCoreException("写入文件user信息异常", e);
            }
        }
    
        /**
         * 修改文件权限
         * @param file 文件 
         * @param posixFilePermissionNumber 数字类型的权限,如:777
         * @throws IOException
         */
        public static void setFilePermissions(File file, String posixFilePermissionNumber) {
            try {
                getPosixFileAttributeView(file)
                    .setPermissions(
                        parsePosixFilePermissiontoSet(parsePosixFilePermissiontoRWX(posixFilePermissionNumber)));
            } catch (IOException e) {
                throw new BizCoreException("写入文件权限信息异常", e);
            }
        }
    
        /**
         * 修改文件权限
         * @param file 文件
         * @param perms 文件权限数组
         * @throws IOException
         */
        public static void setFilePermissions(File file, Set<PosixFilePermission> perms) {
            try {
                getPosixFileAttributeView(file).setPermissions(perms);
            } catch (IOException e) {
                throw new BizCoreException("写入文件权限信息异常", e);
            }
        }
    
        /**
         * 将RWX类型的文件权限修改为Set
         * @param posixFilePermission 
         * @return
         */
        public static Set<PosixFilePermission> parsePosixFilePermissiontoSet(String posixFilePermission) {
            return PosixFilePermissions.fromString(posixFilePermission);
        }
    
        /**
         * 将String rwx类型的权限转换为String 数字类型
         * 如:rw-r----- 转换为 640
         * @param PosixFilePermission
         * @return
         */
        public static String parsePosixFilePermissiontoNum(Set<PosixFilePermission> set) {
            int user = 0;
            int group = 0;
            int other = 0;
            for (PosixFilePermission permission : set) {
    
                switch (permission) {
    
                    case OWNER_READ:
                        user = user | 4;
                        break;
                    case OWNER_WRITE:
                        user = user | 2;
                        break;
                    case OWNER_EXECUTE:
                        user = user | 1;
                        break;
                    case GROUP_READ:
                        group = group | 4;
                        break;
                    case GROUP_WRITE:
                        group = group | 2;
                        break;
                    case GROUP_EXECUTE:
                        group = group | 1;
                        break;
                    case OTHERS_READ:
                        other = other | 4;
                        break;
                    case OTHERS_WRITE:
                        other = other | 2;
                        break;
                    case OTHERS_EXECUTE:
                        other = other | 1;
                        break;
                }
            }
            return "" + user + group + other;
        }
    
        /**
         * 
         * 将String 数字类型的权限转换为String rwx类型
         * 如:640 转换为 rw-r----- 
         * @param posixFilePermission
         * @return
         */
        public static String parsePosixFilePermissiontoRWX(String posixFilePermission) {
            String returnString = "";
            char[] perStringArr = posixFilePermission.toCharArray();
            for (char x : perStringArr) {
                if ((x & 4) == 4) {
                    returnString += "r";
                } else {
                    returnString += "-";
                }
                if ((x & 2) == 2) {
                    returnString += "w";
                } else {
                    returnString += "-";
                }
                if ((x & 1) == 1) {
                    returnString += "x";
                } else {
                    returnString += "-";
                }
            }
    
            return returnString;
        }
    }
    
    
  • 相关阅读:
    mysqldump数据库转储
    Docker安装Mysql挂载目录时报错:Entrypoint script for MySQL Server 5.7.31-1debian10 started.
    SpringBoot缓存——基本环境搭建
    SpringBoot使用缓存报错java.lang.IllegalStateException: No cache could be resolved for 'Builder[public com.example.bean.Employee
    springboot集成JPA返回Json报错 com.fasterxml.jackson.databind.exc.InvalidDefinitionException
    HTTP定义的8种请求类型
    centos下使用docker方式安装minio,运行时报错Unable to write to the backend解决
    Spring Boot @PropertySource 加载指定yaml配置文件获取不到配置的解决方法
    npm与cnpm的区别
    MySQL day03
  • 原文地址:https://www.cnblogs.com/penggy/p/7475847.html
Copyright © 2011-2022 走看看