java 如何为文件及文件夹添加权限

时间:2021-09-25 03:34:28

java 为文件及文件夹添加权限

/**
* 增加权限,使路径可上传文件
*/
public static void addChmod777(String filePath) throws IOException {
	if (!System.getProperty("os.name").startsWith("Win")) {
		String cmdGrant = "chmod 777 " + filePath;
		BaseLogMethod.logInfo(TAG, "File Augmentation after Moving:" + cmdGrant);
		Runtime.getRuntime().exec(cmdGrant);
	}
}
/**
* 增加权限,使路径及子路径都有权限
*/
public static void addRChmod777(String filePath) throws IOException {
	if (!System.getProperty("os.name").startsWith("Win")) {
		String cmdGrant = "chmod -R 777 " + filePath;
		BaseLogMethod.logInfo(TAG, ".addRChmod777: File Augmentation after Moving:" + cmdGrant);
		Runtime.getRuntime().exec(cmdGrant);
	}
}

 

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

1.设置所有者

管理文件所有者

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

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

(1)更改文件的所有者

java 如何为文件及文件夹添加权限

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

输出

java 如何为文件及文件夹添加权限

查看文件详细信息

java 如何为文件及文件夹添加权限

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----

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/JSON_ZJS/article/details/115708211