千家信息网

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

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章将为大家详细讲解有关java怎么为文件及文件夹添加权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java 为文件及文件夹添加权限/** * 增加权限,使
千家信息网最后更新 2024年12月13日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怎么为文件及文件夹添加权限"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0