2011-06-22 58 views
2


有什么方法可以读取/设置文件的Unix权限并检查进程是否具有Java中的用户/组/其他权限?我知道这不是JNI的问题,但我需要不带JNI的跨平台解决方案。如何在Java中获得Unix文件的权限

+3

您需要一个**跨平台**解决方案来读取** unix **文件权限?哦,那对于一些java不相关的原因似乎有问题。如果Java使用File API提供的信息不够用,则需要使用一些特定于UNIX的解决方案。 Jdk7中的NIO File类虽然支持ACL和Unix权限,但我不明白它是如何移植的......你必须坚持使用高级信息 – Voo

+1

“Unix文件权限”(权限?)doesn'这听起来很“跨平台”! –

+0

我认为作者的意思是“跨平台支持Unix文件模式”,这样他就不必为他希望支持的每个平台编写JNI并编译一个库。 –

回答

5

这个将在今年夏天发布的Java 7中使用包java.nio.file.attribute中的类来实现。请参阅JDK 7 API documentation

Java 6及更早版本在标准库中没有任何东西可以使用Unix文件系统权限。

所以,通过使用Java 7 API,你不需要JNI,但是Voo说它当然不会是跨平台的,因为Windows和其他非Unix系统不支持Unix文件权限。

+0

Java7可能支持unix文件权限,但如果您确实需要这样的低级信息(毕竟您通常不能将Unix文件权限映射到ACL),那么该解决方案不会比使用JNI更具可移植性。 – Voo

+0

如果您可以映射Unix权限Windows权限应该可以将Windows/Unix ACL列入Unix权限列表。 –

+0

@Voo认识到,使用JNI,您需要为每种unix类型重建JNI部分,例如Mac,Linux,Solaris等等,所以这种方法当然有很大的帮助。然而,“跨平台”的措词是不幸的,因为它使人想到视窗。 – vidstige

1

目前Java中没有通用文件访问权限管理API。它针对未来的Java版本。至于现在,我们没有更多的则File.canRead()/ canWrite()/ canExecute()和File.setExecutable ...

3
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支持的,不是跨平台。