【发布时间】:2014-06-26 14:28:42
【问题描述】:
我想检查文件夹的写权限。文件夹可能是 user.home 或其他东西。无论我把什么文件夹放到 FilePermission 中,我都会抓住这个..
一些代码:
public class Test {
public static void main(String[] args) {
AccessController.checkPermission(new FilePermission(System.getProperty("user.home"), "write"));
System.out.println("tadam");
}
}
堆栈跟踪:
Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Users\AntonovDI" "write")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:560)
at ru.inversion.jinved.impl.Test.main(Test.java:19)
为什么?
我知道另一种解决方案,但我仍然对 =) 感兴趣
Path userHomePath = Paths.get(System.getProperty("user.home")).toAbsolutePath();
if (Files.isWritable(userHomePath)) {
System.out.println("tadam");
}
【问题讨论】:
-
好吧,我不知道你的 user.home-Folder 是什么样的(或者它设置了什么权限等),但我强烈建议将你的代码放入 try-catch -statement,以确保它不会在抛出 AccessControlException 时停止;因为它继承自 RuntimeException,所以它是一个未经检查的异常,因此不会出现编译器错误。
-
谢谢...我只是想简化代码,你看。我知道它并且写权限是存在的。用户主目录是 C:\Users\AntonovDI,您可以在 stacktrace 中看到它。我注意到参数中的哪个文件夹并不重要。关于 javadoc 中的安全策略的一些东西,但我不知道它到底是什么。
-
@Christian 异常不会“停止”程序。
-
所以请告诉非本地人正确的动词是什么:-) 如果你没有捕捉到未经检查的异常,它将使 JVM 终止程序执行。这就是我说“失速”时的意思。
标签: java access-control