温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用java修改文件所有者及其权限的方法

发布时间:2021-03-05 16:02:28 来源:亿速云 阅读:304 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关使用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<AclEntry> 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<AclEntryPermission> permissions = entry.permissions();        for (AclEntryPermission p : permissions) {          System.out.format("%s %n", p);        }      }    } catch (IOException e) {      e.printStackTrace();    }  }}

输出结果为

Principal: BUILTIN\Administrators (Alias)Type: ALLOWPermissions 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: ALLOWPermissions 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: ALLOWPermissions 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: ALLOWPermissions 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<AclEntryPermission> 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<AclEntry> aclEntries = aclView.getAcl();      aclEntries.add(newEntry);      aclView.setAcl(aclEntries);    }catch (IOException e){      e.printStackTrace();    }  }}

输出结果比刚才多了

Principal: hkgi-PC\abc (User)Type: ALLOWPermissions 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<PosixFilePermission> 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<PosixFilePermission> 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<PosixFilePermission> 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修改文件所有者及其权限的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI