【发布时间】:2011-11-15 05:37:21
【问题描述】:
我需要检查特定目录的文件创建权限。
我试过了:
try {
AccessController.checkPermission(new FilePermission("directory_path", "write"));
// Have permission
} catch (SecurityException e) {
// Doesn't have permission
}
...但这总是抛出 SecurityException(据我所知,这不是检查底层 fs 权限,而是检查一些应该显式配置的 JVM 设置)。
另一种可能的方法是使用这样的东西:
File f = new File("directory_path");
if(f.canWrite()) {
// Have permission
} else {
// Doesn't have permission
}
...但即使我无法在指定目录中创建文件,这也会返回 true(例如,当我在没有管理员权限的用户下运行我的应用程序时,我无法在“c:\”中创建文件,但 f.canWrite() 返回真的)。
最后我做了类似这样的破解:
File f = new File("directory_path");
try {
File.createTempFile("check", null, f).delete();
// Have permission
} catch (IOException e) {
// Doesn't have permission
}
...但这可能仅作为临时解决方案,因为我需要为客户端 fs 上的几乎所有文件夹获取此类权限。
有人知道如何很好地获得真实的文件创建权限,而不会导致上述性能问题和黑客攻击吗?
【问题讨论】:
标签: java file permissions directory file-permissions