如何使用java修改文件所有者及其权限

网友投稿 584 2022-12-20


如何使用java修改文件所有者及其权限

这篇文章主要介绍了如何使用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为用户iZZggabc添加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----


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JavaSwing GridLayout 网格布局的实现代码
下一篇:Spring boot2.x中集成H2数据库代码实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~