如何在Java中获取Unix文件权限

6


有没有办法在Java中读取/设置文件的Unix权限并检查进程是否具有用户/组/其他权限?我知道这不是JNI的问题,但我需要一个不使用JNI的跨平台解决方案。


3
你需要一个跨平台的解决方案来读取Unix文件权限?哦,好像由于某些与Java无关的原因会有问题。如果Java提供的File API信息不足够,你需要使用一些Unix特定的解决方案。不过,Jdk7中的NIO File类支持ACL和Unix权限-但我不知道那是否可移植。你将不得不坚持使用高级别信息。 - Voo
1
“Unix文件权限”听起来并不是很“跨平台”! - Kerrek SB
我认为作者的意思很明确,即“跨支持Unix文件模式的平台”,这样他就不必为了支持每个平台而编写JNI并编译库。 - Edward Thomson
3个回答

9
Set<PosixFilePermission> filePerm = null;
try {
    filePerm = Files.getPosixFilePermissions(Paths.get("/app/data/abc.txt"));
} catch (IOException e) {
    e.printStackTrace();
}
String permission = PosixFilePermissions.toString(filePerm);

从Java 1.7开始支持,不跨平台。


5
这将在Java 7中实现,该版本将于今年夏季发布,使用java.nio.file.attribute包中的类。请参阅JDK 7 API文档
旧版的Java 6及更早版本没有标准库可用于处理Unix文件系统权限。
因此,通过使用Java 7 API,您将无需使用JNI,但正如Voo所说,这当然不会跨平台,因为Windows和其他非Unix系统不支持Unix文件权限。

Java7 可能支持 Unix 文件权限,但如果您确实需要这样的低级信息,解决方案将不会比使用 JNI 更具可移植性(毕竟通常无法将 Unix 文件权限映射到 ACL)。 - Voo
如果您能够将Unix权限映射到Windows权限,那么将Windows/Unix ACLs列出为Unix权限的列表应该是可能的。 - Ivan Mushketyk
@Voo 意识到使用 JNI 需要为每种 Unix 类型(例如 Mac、Linux、Solaris 等)重新构建 JNI 部分,因此这种方法确实有很大帮助。然而,“跨平台”这个词汇不幸地让人想到例如 Windows。 - vidstige

1

目前在Java中没有通用的文件访问权限管理API。这是针对未来的Java版本。就目前而言,我们只有File.canRead() / canWrite() / canExecute()和File.setExecutable()等功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接