这篇文章主要介绍了如何使用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修改文件所有者及其权限
当前链接:http://www.scyingshan.cn/article/iioeii.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 