java - 获取特定用户的文件权限

标签 java

我想获得特定用户的文件权限。目前我正在做这样的事情:

 File file1 = new File(filePath);
 System.out.println("write permissions: " + file1.canWrite);
 //and other attributes

这提供了用户执行程序的权限。但问题是我想指定一个用户或至少打印文件的所有权限,而不仅仅是所有用户。 有什么想法吗?

最佳答案

没有独立于实现的方法来获取此信息。

您必须查看正在执行的平台。例如在典型的 UNIX 文件系统上,有所有者、组和世界权限。

要检查用户是否是文件的所有者,请在此处回答: Get file/directory owner's name in Java 正如上述链接中的答案所示,在某些实现中获取文件所有者可能会失败。

用户可能被禁止以所有者身份读/写文件,但仍然可以基于组或世界权限执行操作。要检查组,您必须根据文件系统和操作系统查询 LDAP 或 UNIX 组或 Active Directory。

当操作系统和文件系统支持 ACL 以及常规 UNIX 权限(可以定义细粒度的每个用户权限)时,情况会变得更加复杂。 Java 没有标准 API 来访问这些。请参阅"AclFileAttributeView aclAttr" always null on OpenSuSE Linux 。现有的 java.nio API 在这里并不总是有用。

粘滞位在大多数 UNIX 中也起着不允许非目录所有者移动或删除文件的作用,但语义有所不同,请阅读:https://en.wikipedia.org/wiki/Sticky_bit

TL;DR:没有简单的方法,根据您的使用情况,您必须调用操作系统来获取每个用户的文件权限。

关于java - 获取特定用户的文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419496/

相关文章:

java - 启动 Glassfish Server 时出错。本地主机需要密码

java - 一个实体中的 Hibernate OneToMany

java - 如何使用spring aop自动设置date_created

java - Statement.execute(sql) 与 executeUpdate(sql) 和 executeQuery(sql)

java - 抽屉导航错误与闪屏

java - JAVA中简单的RSA加密和解密消息

java - JFileChooser 文件名过滤器

java - 调用<aop :aspectj-autoproxy/> multiple times when loading spring context

java - 在 Java 中读取 16 位位图

java - 使用 Java 三元运算符时的奇怪行为