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

 更新时间:2019年12月03日 10:55:09   作者:慕尘  
这篇文章主要介绍了如何使用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: 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<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: 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<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----

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • spring boot @ResponseBody转换JSON 时 Date 类型处理方法【两种方法】

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法【两种方法】

    这篇文章主要介绍了spring boot @ResponseBody转换JSON 时 Date 类型处理方法,主要给大家介绍Jackson和FastJson两种方式,每一种方法给大家介绍的都非常详细,需要的朋友可以参考下
    2018-08-08
  • Java 1.0和Java 1.1 的IO类的比较

    Java 1.0和Java 1.1 的IO类的比较

    Java库的IO分为输入/输出两部分。早期的Java 1.0版本的输入系统是InputStream及其子类,输出系统是OutputStream及其子类。后来的Java 1.1版本对IO系统进行了重新设计。本分对此做了分析和比较,有利于学习,最后给出了例子。
    2013-11-11
  • Java String类和StringBuffer类的区别介绍

    Java String类和StringBuffer类的区别介绍

    这篇文章主要介绍了Java String类和StringBuffer类的区别, 关于java的字符串处理我们一般使用String类和StringBuffer类有什么不同呢,下面我们一起来看看详细介绍吧
    2022-03-03
  • java实现验证码类生成中文验证码

    java实现验证码类生成中文验证码

    java实现的汉字输入验证码,主要包含两个类,一个是生成验证码,一个是判断验证码输入是否正确,实现原理非常简单,将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码图片并用文本框值和session值比较,功能就怎么简单
    2014-01-01
  • Java实现手机号码归属地查询

    Java实现手机号码归属地查询

    这篇文章主要为大家详细介绍了如何利用Java实现手机号码归属地查询功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Spring Boot Maven 打包可执行Jar文件的实现方法

    Spring Boot Maven 打包可执行Jar文件的实现方法

    这篇文章主要介绍了Spring Boot Maven 打包可执行Jar文件的实现方法,需要的朋友可以参考下
    2018-02-02
  • SpringBoot实现多数据源配置的示例详解

    SpringBoot实现多数据源配置的示例详解

    这篇文章主要为大家详细介绍了SpringBoot实现多数据源配置的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • java poi导出excel时如何设置手动换行

    java poi导出excel时如何设置手动换行

    这篇文章主要介绍了java poi导出excel时如何设置手动换行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java利用DFA算法实现敏感词管理

    Java利用DFA算法实现敏感词管理

    我们在完成一些文章发布的功能是,可以使用第三方工具如阿里云的内容安全来进行文章的审核,但是这个第三方接口并不能过滤一些敏感词,所以本文就来讲讲如何通过DFA算法就行敏感词管理吧
    2024-11-11
  • 简单易懂讲解happens-before原则

    简单易懂讲解happens-before原则

    Java内存模型中的happens-before是什么?为什么会有这东西的存在?一个新东西肯定是上手先,但是等我们空下来回过头来,我们还是需要去理解这些知识,只有这样我才能深刻的记住,并且运用熟练。下来和小编来一起学习下
    2019-05-05

最新评论