java - 在java中检查文件创建权限的最佳方法是什么

标签 java file permissions directory file-permissions

我需要检查特定目录的文件创建权限。

我试过:

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 上的几乎所有文件夹获得此类权限。

有谁知道如何很好地获得真正的文件创建权限,而不会导致上述性能问题和黑客攻击?

最佳答案

测试任何资源的可用性/可用性的最佳方法是尝试使用它。在这种情况下,new FileOutputStream(new File(dir, name))。如果目录不可写,或者文件已经存在且不可写等等,它将抛出 IOException。当您执行该代码时,操作系统已经必须进行所有这些检查:尝试全部复制是没有意义的,即使你 100% 正确,这是不可能的,你仍然引入了一个计时窗口,在这个窗口中,由于异步 Activity ,先前的“真”条件可能会变成“假” .无论如何,您必须从文件创建中捕获异常,并在 catch block 中编写代码来处理它们:为什么要写两次?

关于java - 在java中检查文件创建权限的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386477/

相关文章:

java - oAuth 2 Gmail - Android/iOS 连接和服务器使用

java - NFC 应用程序在 enableForegroundDispatch 上崩溃

java - 我的移动服务提供商的连接问题

java - 仅使用 Java.IO 在文件中读取/写入字节

c - 将文件作为参数传递并读取数据

java - 如何查找字符串中的字符模式偏移量

c - 如何从 C 中的 proc 文件中读取最后 n 个字节

Azure 权限 : not authorized to perform this operation

c# - 如何设置多语言 PrincipalPermission 角色名称?

django - 根据用户Django的权限制作动态侧边栏