修改java_java修改文件所有者及其权限

1.设置所有者

管理文件所有者

Files.getOwner()和Files.setOwner()方法

要使用UserPrincipal来管理文件的所有者

(1)更改文件的所有者

bb8bc60bc1b5a383d883c86df25451f9.png

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();

}

}

}

输出

24ea82333c71acf8aa7d45f6f19dcf11.png

查看文件详细信息

382c903410fbf4f779c8f7cf54266a59.png

2.ACL文件权限

Windows上支持ACL类型文件属性

使用AclFileAttributeView的

getAcl()方法获取文件的AclEntry列表

setAcl()方法设置文件的AclEntry列表

(1)读取文件e:/test1.txt的ACL条目

importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.nio.file.attribute.AclEntry;importjava.nio.file.attribute.AclEntryPermission;importjava.nio.file.attribute.AclFileAttributeView;importjava.util.List;importjava.util.Set;public classMain {public static voidmain(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();

}

}

}

输出结果为

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

View Code

(2)为指定用户添加新的ACL条目

e:/test1.txt为用户abc添加DATA_READ和DATA_ WRITE权限

importjava.io.IOException;importjava.nio.file.FileSystems;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;import java.nio.file.attribute.*;importjava.util.EnumSet;importjava.util.List;importjava.util.Set;import staticjava.nio.file.attribute.AclEntryPermission.READ_DATA;import staticjava.nio.file.attribute.AclEntryPermission.WRITE_DATA;public classMain {public static voidmain(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的权限

importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;import java.nio.file.attribute.*;importjava.util.Set;public classMain {public static voidmain(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的文件权限

importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;import java.nio.file.attribute.*;importjava.util.EnumSet;importjava.util.Set;import static java.nio.file.attribute.PosixFilePermission.*;public classMain {public static voidmain(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 voidreadPermissions(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 voidupdatePermissions(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----

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值