我目前正在尝试测试目录是否存在,如果不存在,我希望程序创建reportPath
中指定的完整目录。运行代码时,mkdirs()
返回false,并且未创建reportPath
中指定的目录。 mkdirs()
如果不存在,String reportPath = outputFile+"\\"+providerName+"\\"+testMode+"\\";//+testTarget+"\\";
File dir = new File(reportPath);
if (!dir.exists()) {
System.out.println("Report Directory does not exist");
System.out.println("Directory created:" + dir.mkdirs());
}
PrintWriter writer = new PrintWriter(reportPath+fileName, "UTF-8");
int id = 1;
writer.println("ID,Provider,Key Type,Key Size,Operation,Parameters,Data Size,Passed,Error details");
for (TestResult r : results) {
writer.println(Integer.toString(id) + "," + r.provider + "," + r.keyType + "," + r.keySize + "," + r.operation + "," + r.parameter + "," + r.dataSize + "," + r.passed + "," + r.errorDetails);
id++;
}
writer.close();
是否会创建整个路径?
目前使用以下代码:
java.io.FileNotFoundException: <path> (Access is denied)
at java.io.FileOutputStream.open0(Native Method)
(followed by a long list of errors)
当我运行它时,我收到以下错误:
Ionic
答案 0 :(得分:2)
你说:
权限似乎很好
外表可能具有欺骗性!
“访问被拒绝”正在发生,因为操作系统不允许您访问/创建/写入文件或目录。您可以假设它只是这样做,因为有关您的请求的某些内容违反了访问控制规则。
以下是一些可能性。
您使用的路径可能指的是您认为的其他文件或目录;例如它可能是一个相对路径,当前目录不是你想的,或者路径名中可能有错误(拼写,区分大小写等)
应用程序可能无法以正确的用户身份运行。或者在Windows上,它可能没有管理员权限(如果需要)。或者许多用户不在正确的组中(在UNIX / Linux上......)
权限可能不是您的想法。你检查过组权限了吗?你检查过ACL吗?您是否检查了路径中的所有目录...从文件系统根目录开始?
在Linux上,这可能与SELinux或AppArmor有关,或者在Docker容器中运行,或类似的东西。
如果您尝试在本地安装的远程文件系统上创建目录,可能是由于本地和远程身份系统之间不匹配。
如果您正在尝试使用GPFS / AFM缓存,NFS身份映射等等......
摘要:某些错误的权限/访问控制,这就是问题所在。
答案 1 :(得分:1)
java.io.File已经过时了。改为使用java.nio.file package:
Path dir = Paths.get(outputFile, providerName, testMode);
Files.createDirectories(dir);
PrintWriter writer = new PrintWriter(Files.newBufferedWriter(dir.resolve(fileName)));
java.io.File的大多数方法只返回一个布尔值,而不告诉你出了什么问题。 Files
的方法如果返回则总是成功;如果他们失败了,他们会抛出一个信息丰富且有用的例外。