Java使用PosixFilePermission设置文件权限

时间:2020-02-23 14:36:50  来源:igfitidea点击:

Java File类可以设置文件权限,但用途不多。
最大的缺点是,您可以将文件权限分为两组用户-所有者和其他所有人。
您无法为网上论坛和其他用户设置不同的文件权限。

Java设置文件权限

Java 7引入了PosixFilePermission枚举和java.nio.file.Files包含一个setPosixFilePermissions(Path path,Set <PosixFilePermission> perms)方法,可用于轻松设置文件权限。

这是一个简单的程序,清楚地说明了为什么PosixFilePermission更好。

FilePermissions.java

package com.theitroad.files;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.Set;

public class FilePermissions {

  /**
   * File Permissions Java Example using File and PosixFilePermission
   * @param args
   * @throws IOException 
   */
  public static void main(String[] args) throws IOException {
      File file = new File("/Users/hyman/temp.txt");
      
      //set application user permissions to 455
      file.setExecutable(false);
      file.setReadable(false);
      file.setWritable(true);
      
      //change permission to 777 for all the users
      //no option for group and others
      file.setExecutable(true, false);
      file.setReadable(true, false);
      file.setWritable(true, false);
      
      //using PosixFilePermission to set file permissions 777
      Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
      //add owners permission
      perms.add(PosixFilePermission.OWNER_READ);
      perms.add(PosixFilePermission.OWNER_WRITE);
      perms.add(PosixFilePermission.OWNER_EXECUTE);
      //add group permissions
      perms.add(PosixFilePermission.GROUP_READ);
      perms.add(PosixFilePermission.GROUP_WRITE);
      perms.add(PosixFilePermission.GROUP_EXECUTE);
      //add others permissions
      perms.add(PosixFilePermission.OTHERS_READ);
      perms.add(PosixFilePermission.OTHERS_WRITE);
      perms.add(PosixFilePermission.OTHERS_EXECUTE);
      
      Files.setPosixFilePermissions(Paths.get("/Users/hyman/run.sh"), perms);
  }

}

从上面的示例可以明显看出,PosixFilePermission提供了更多选项,并且代码更具可读性。