Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件mkdirs()未按预期工作_Java - Fatal编程技术网

Java 文件mkdirs()未按预期工作

Java 文件mkdirs()未按预期工作,java,Java,我目前正在尝试测试目录是否存在,如果不存在,我希望程序创建在reportPath中指定的完整目录。当我运行代码时,mkdirs()返回false,并且未创建在reportPath中指定的目录。如果路径不存在,是否mkdirs()生成整个路径 目前正在使用以下代码: String reportPath = outputFile+"\\"+providerName+"\\"+testMode+"\\";//+testTarget+"\\"; File dir = new File(reportPat

我目前正在尝试测试目录是否存在,如果不存在,我希望程序创建在
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)
java.io.FileNotFoundException:(访问被拒绝)
位于java.io.FileOutputStream.open0(本机方法)
(后面是一长串错误)

java.io.File已过时。请使用以下选项:

大多数java.io.File方法只返回一个布尔值,而不告诉您出了什么问题。
文件的方法
如果返回总是成功的;如果失败,他们会抛出一个信息丰富且有用的异常。

你说:

权限似乎不错

外表可能是骗人的

发生“访问被拒绝”是因为操作系统不允许您访问/创建/写入文件或目录。您可以假设它这样做只是因为您的请求违反了访问控制规则

以下是一些可能性

  • 您使用的路径可能指的是其他文件或目录,而不是您所认为的;e、 g.它可能是一个相对路径,并且当前目录不是您所认为的,或者路径名中可能存在错误(拼写、区分大小写等)

  • 应用程序可能不是以正确的用户身份运行。或者在Windows上,它可能没有管理员权限(如果需要)。或者用户可能不在正确的组中(在UNIX/Linux上…)

  • 权限可能与您的想法不同。您是否检查了组权限?你检查过ACL了吗?您是否检查了路径中的所有目录。。。从文件系统根目录开始

  • 在Linux上,这可能与SELinux或AppArmor有关,也可能与运行在Docker容器中或类似的东西有关

  • 如果您试图在本地装载的远程文件系统上创建目录,可能是因为本地和远程标识系统之间不匹配

  • 如果您试图使用GPFS/AFM缓存、NFS身份映射等



  • 摘要:权限/访问控制有问题,这就是问题所在。

    您没有在“dir”路径中创建目录的权限请参见答案,权限似乎很好。发帖前查看了一下,注意
    FileNotFoundException
    并不是最“特殊”的异常。您是否可以打印
    reportPath
    以查看其外观。您的代码是否打印了创建的
    目录:false
    ?您的
    reportPath
    以“outputFile”(
    String reportPath=outputFile+“\\”…
    )开头。听起来很可疑,第一级目录是一个文件,可能已经存在。如果同名文件已存在,则无法创建目录。你检查过了吗?异常保存文件java.nio.file.NoSuchFileException:是我从it@PUG查看异常的堆栈跟踪。哪个方法引发了该异常?
    Path dir = Paths.get(outputFile, providerName, testMode);
    Files.createDirectories(dir);
    
    PrintWriter writer = new PrintWriter(Files.newBufferedWriter(dir.resolve(fileName)));