如果你知道windows API,你可以使用JNA(没有编写本机代码的麻烦的JNI)来调用Windows API来获取ACL数据.
这里有一篇文章,它使用VBScript获取文件安全性详细信息.您可以修改它,并让它以可解析的格式(例如XML)返回详细信息.您可以使用Runtime.exec()或ProcessBuilder运行"cscript.exe"来调用VBScript文件.您可以将ACL信息写入标准输出,并使用可用的流java.lang.Process
来读取过程输出.
虽然exec'ing vbscript可能看起来有点hacky,但它会让你快速启动,因为大部分代码已经编写并正常工作(我认为 - 我没有尝试过本文中的脚本.)使用脚本也避免了需要通过JNA将相关的Win32 apis映射到java.
mdma的答案涵盖了Java 6的最佳方法,但这里是Java 7的一个简单示例:
Path file = Paths.get("c:\\test-file.dat");
AclFileAttributeView aclFileAttributes = Files.getFileAttributeView(
file, AclFileAttributeView.class);
for (AclEntry aclEntry : aclFileAttributes.getAcl()) {
System.out.println(aclEntry.principal() + ":");
System.out.println(aclEntry.permissions() + "\n");
}
Run Code Online (Sandbox Code Playgroud)