如何使用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----

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

(0)

相关推荐

  • Java实现批量修改txt文件名称的方法示例

    本文实例讲述了Java实现批量修改txt文件名称的方法.分享给大家供大家参考,具体如下: 最近在做特征选择的实验时,需要批量修改一下文件名称,在这里做一下记录. package com.cqu.experiment; import java.io.File; /** * @author 作者: E-mail:@126.com * @version 创建时间:2016年12月26日 下午3:02:01 类说明 */ public class RenameTxt { public static vo

  • Java文件、文件夹权限修改的两种方法

    前言 Java 修改文件权限这个应该是老生常谈的功能,但是最近发现以前写的代码有一点点安全隐患,所以把代码改成NIO的方式,下面会介绍2种修改文件,文件夹权限的方法. 使用File类 这个方式是以前最常见的方式,但是这个方式有点缺点在LINUX或者UNIX系统下,需要显示的指定权限为440,770等就显得不是那么好用了. File dirFile = new File(dirPath); dirFile.setReadable(true, false); dirFile.setExecutabl

  • java基于Apache FTP实现文件上传、下载、修改文件名、删除

    Apache FTP 是应用比较广泛的FTP上传客户端工具,它易于操作,代码简略,结构清晰,是做FTP文件客户端管理软件的优先之选.FTP的操作包括:FTP文件上传(断点续传).FTP文件下载.FTP文件重命名.FTP文件删除,这些操作已经将FTP应用管理的方式发挥的淋漓尽致了,So 我一直都用此种方式来实现FTP文件服务器的管理工作:下附FTP工具代码. 1.FTP文件操作状态枚举类 package com.scengine.wtms.utils.ftp; public enum FTPSta

  • Java web含验证码及权限登录实例代码

    所用到的开发工具为myeclipse10,MySQL数据库. 首先,在myeclipse中新建一个Java web项目. 项目的结构: 数据库结构: 下面将各个包中的代码粘贴出来. com.ningmeng.dao包 package com.ningmeng.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLExcept

  • Java编程访问权限的控制代码详解

    本文研究的主要是Java编程访问权限的控制的相关内容,具体介绍如下. 之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的. (1)首先是包名 使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类.如: package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } } 自

  • java使用apache commons连接ftp修改ftp文件名失败原因

    今天被ftp上中文名修改坑了好久 项目用的是 apache commons 里的 FtpClient 实现的对ftp文件的上传下载操作,今天增加了业务要修改ftp上的文件名,然后就一直的报错,问题是它修改名字的方法只返回一个boolean,没有异常,这就很蛋疼了,找了好久才发现是中文的名字的原因 改名 直接上代码 package net.codejava.ftp; import java.io.IOException; import org.apache.commons.net.ftp.FTPC

  • java怎么创建目录(删除/修改/复制目录及文件)代码实例

    复制代码 代码如下: import java.io.*; public class FileOperate {   public FileOperate() {   } /**    * 新建目录    * @param folderPath String 如 c:/fqf    * @return boolean    */   public void newFolder(String folderPath) {     try {       String filePath = folder

  • Java实现简单修改文件名的方法分析

    本文实例讲述了Java实现简单修改文件名的方法.分享给大家供大家参考,具体如下: 今天帮朋些个网站,做到商品上传的时候需要给文件重新设置名称,以前也做过类的功能,只是没有保存忘了,为了避免以后再重新找,就在此记录下,哈哈..... 例子一: import java.io.*; public class test1 { public static void main(String[] args) { File file=new File("D:/gai.jpg"); //指定文件名及路径

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

    这篇文章主要介绍了如何使用java修改文件所有者及其权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.设置所有者 管理文件所有者 Files.getOwner()和Files.setOwner()方法 要使用UserPrincipal来管理文件的所有者 (1)更改文件的所有者 import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute

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

    目录 java 为文件及文件夹添加权限 java 修改文件所有者及其权限 1.设置所有者 2.ACL文件权限 3.POSIX文件权限 java 为文件及文件夹添加权限 /** * 增加权限,使路径可上传文件 */ public static void addChmod777(String filePath) throws IOException { if (!System.getProperty("os.name").startsWith("Win")) { Str

  • Linux系统下如何查看及修改文件读写权限

    查看文件权限的语句: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话)

  • Linux常用命令之chmod修改文件权限777和754

    常用下面这条命令: chmod 777  文件或目录 示例:chmod  777 /etc/squid 运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行). 如果是Ubuntu系统,可能需要加上sudo来执行: sudo chmod  777 /etc/squid 故事的开始,都会先留一个悬念. 只有程序员能懂的冷笑话系列中,有个比较经典的段子: 请用最简洁的语言描述我国FL. 754. 所以,754是什么意思呢?754是什么意思呢?754是什么意思呢? 下面具体介绍c

  • Linux下修改文件权限(所有权)

    Linux与Unix是多用户操作系统,所以文件的权限与所有权的实现就显得很有必要:每个文件主要与三组权限打交道,分别是用户(user),用户组(group),其他用户(other) 用户(u)是文件的所有者,通常有所有的文件的操作权限 用户组(g)是多个用户的集合,可能有文件的部分访问权,相当于各用户之间的共享文件 其他(o)是指文件所有者和用户组成员之外的任何人 使用ls -l可以显示出当前目录下的文件类型,权限,所有者以及组在内的多方面信息: 第一列含义为:-(filetype)---(us

  • python修改linux中文件(文件夹)的权限属性操作

    今天生成的对流云团路径图片放在linux下,文件的权限都是rw,没有x,后续的别人的程序调用不了,这里附上对三个属性的简单解释,有不够的欢迎大家补充 Linux的权限不是很细致,只有RWX三种 r(Read,读取):对文件而言,具有读取文件内容的权限:对目录来说,具有浏览目录的权限. w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限:对目录来说,具有新建,删除,修改,移动目录内文件的权限. x(eXecute,执行):对文件而言,具有执行文件的权限:对目录了来说该用户具有进

  • linux下修改文件权限chmod命令详细解析

    使用 Linux 的chmod命令控制谁可以访问读写或运行目标文件. 在 Linux 中,谁可以对文件或目录做什么是通过一系列权限来控制的. 权限可以控制对文件或目录执行的操作(读写或执行). 我们可以使用-l(长格式)选项来ls列出文件和目录的文件权限. ls -l 在每一行中,第一个字符标识列出条目类型.如果它是破折号 ( -),则它是一个文件.如果是字母d ,则是目录. 接下来的九个字符代表三组权限的设置. 前三个字符显示拥有文件的用户的权限(用户权限). 中间三个字符显示用户组成员的权限

  • mac 系统下使用 chmod 命令修改文件权限

    PC 端修改文件访问权限算是比较常用的操作,在安装部分软件时经常需要使用到.在 Mac 系统的终端上修改文件权限使用的是 Linux 中的 chmod 命令.这里详细介绍一下该命令的相关使用. 也可以直接通过 man chmod 在终端工具上查看该命令的帮助手册. 查看文件权限 ls -l 命令可以查看当前目录下所有文件的访问权限,也可以查看指定文件.比如,查看 Tomcat bin 目录中的 startup.sh 文件的访问权限时: yifeng:bin yifeng$ ls -l start

  • vbs通过WMI修改文件文件夹的NTFS权限

    使用WMI修改文件文件夹的NTFS权限, 代码: 复制代码 代码如下: strUser = "guests"strPath = "D:\\abc.txt"RetVal = AddPermission(strUser,strPath,"R",True) '------------------------------------------------------------------------- '用于给文件和文件夹添加一条权限设置.返回值:

  • java批量修改文件后缀名方法总结

    突然需要改一堆文件的后缀名,所以想编程解决,话不多说直接上代码 java import java.io.File; import java.util.Scanner; public class FileEdit { public static void renameFiles(String path, String oldExt, String newExt) { File file = new File(path); if (!file.exists()) { System.err.print

随机推荐