我正在创建一个简单的功能来检查天气我对文件夹的写入/删除权限
我想知道操作系统是否允许写入文件夹?
public static String PermissionCheck(String FilePath) {
//File f = new File(FilePath);
String actions = "read,write";
try
{
AccessController.checkPermission(new FilePermission(FilePath, actions));
return ("You have read/write permition to use : " + FilePath);
}
catch (SecurityException e)
{
return ("You don't have read/write permition to use : " + FilePath);
}
}
当我使用正确的路径或不正确的路径调用时,它始终从cathc返回消息。
我知道它的重复问题我已经通过很多链接但没有运气!!
示例:
PreChecks.PermissionCheck("C:/TEST/G2");
PreChecks.PermissionCheck("C:/Program Files/SAP");
两个调用都会从catch块返回消息,其中我拥有" C:/ TEST / G2"没有写入" C:/ Program Files / SAP"。
的写入权限我也尝试了canWrite,但它说我已经对#C; / Program Files / SAP"但我知道我没有那些。
答案 0 :(得分:0)
班级java.io.File
的能力有限。 E.g。
File f=new File("C:\\Program Files\\Java");
System.out.println(f.canWrite());
在我的机器上打印true
,但不允许用户进程在此位置写入。
相比之下,
Path p=Paths.get("C:\\Program Files\\Java");
System.out.println(Files.isWritable(p));
正确打印false
。
因此,解决方案是使用NIO API。
方法AccessController.checkPermission
的目的完全不同。它有助于实现安全管理员。它会抛出SecurityException
,因为您没有明确授予访问该目录的权限,但只要您没有安装SecurityManager
,就无关紧要了。