千家信息网

java怎么为文件及文件夹添加权限

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章将为大家详细讲解有关java怎么为文件及文件夹添加权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java 为文件及文件夹添加权限/** * 增加权限,使
千家信息网最后更新 2025年11月10日java怎么为文件及文件夹添加权限

这篇文章将为大家详细讲解有关java怎么为文件及文件夹添加权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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);        }}/** * 增加权限,使路径及子路径都有权限 */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来管理文件的所有者

(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 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 permissions = entry.permissions();                for (AclEntryPermission p : permissions) {                    System.out.format("%s %n", p);                }            }        } catch (IOException e) {            e.printStackTrace();        }    }}

输出结果为

Principal: BUILTIN\Administrators (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 AUTHORITY\SYSTEM (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 AUTHORITY\Authenticated 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: BUILTIN\Users (Alias)
Type: ALLOW
Permissions are:
READ_ATTRIBUTES
SYNCHRONIZE
EXECUTE
READ_DATA
READ_ACL
READ_NAMED_ATTRS

(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 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 aclEntries = aclView.getAcl();            aclEntries.add(newEntry);            aclView.setAcl(aclEntries);        }catch (IOException e){            e.printStackTrace();        }    }}

输出结果比刚才多了

Principal: hkgi-PC\abc (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 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 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 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----

关于"java怎么为文件及文件夹添加权限"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

文件 权限 输出 所有者 方法 结果 文件夹 篇文章 路径 属性 常量 更多 条目 用户 管理文件 类型 支持 管理 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 基于sql的数据库 兴业数金和中信银行软件开发岗位 企友软件数据库连接密码忘记 幼儿园网络安全教育教案简报 普陀区实用软件开发诚信合作 为何现在的服务器都不是03系统 学软件开发需要什么基础 访问百度数据库年费用 电脑吃鸡该服务器不可用 简易web服务器 迈瑞软件开发工资 罪恶都市传奇服务器怎么调中文 小学生网络安全法板报 软件开发需要学python嘛 服务器后台有人登录能看到吗 网络安全人才现状分析 焦作软件开发哪家专业 夸克如何改成海外服务器 带网络安全模式没有输入法 数据库日志满了会打印不了吗 电脑如何连自己家网络安全 安卓应用软件开发语言是啥 服务器关闭自动上网 广州交易软件开发工程师 重庆荣昌食材配送软件开发 软件开发的进度控制 福州分布式服务器行情 计算机网络技术介绍书桌 绝地吃鸡服务器 台州佑安网络技术有限公司工资
0