Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 File.mkdir或mkdirs返回false-原因?_Java_File_Javadoc_Mkdir - Fatal编程技术网

Java File.mkdir或mkdirs返回false-原因?

Java File.mkdir或mkdirs返回false-原因?,java,file,javadoc,mkdir,Java,File,Javadoc,Mkdir,为什么file.mkdir返回false 谷歌表示可能有几个原因(例如安全性、权限、路径名等) 我的问题是: 如何找到返回false的确切原因 如果安全性/权限是一个原因,那么为什么不抛出SecurityException 如果安全性/权限是一个原因,那么为什么不抛出SecurityException(在javadoc中提到) 当您没有JVM级别的权限(而不是操作系统级别)执行某项操作时,将抛出SecurityException 有没有办法找到返回false的确切原因 不,好的。知道的唯一方法是

为什么file.mkdir返回false

谷歌表示可能有几个原因(例如安全性、权限、路径名等)

我的问题是:

  • 如何找到返回false的确切原因
  • 如果安全性/权限是一个原因,那么为什么不抛出SecurityException
  • 如果安全性/权限是一个原因,那么为什么不抛出SecurityException(在javadoc中提到)

    当您没有JVM级别的权限(而不是操作系统级别)执行某项操作时,将抛出
    SecurityException

    有没有办法找到返回false的确切原因

    不,好的。知道的唯一方法是自己检查目录的权限,在调用它们之前确保它不存在,检查父目录是否存在,等等

    但是,如果您使用的是Java7或更高版本,则可以使用NIO来创建目录。具体来说:

    如果要完全使用NIO而不使用
    java.io.File
    ,可以使用创建
    路径

    Path dir = Paths.get("mydir");
    Files.createDirectory(dir);
    
    在这两种情况下,如果无法创建目录,它将抛出一个
    IOException
    ,并给出操作失败的确切原因

    这适用于
    文件
    中的大多数方法,因此建议使用它而不是使用
    文件
    类中的方法

  • 不,没有办法找到确切的原因
    mkdirs()
    返回false,至少不是从Java内部返回的,因为它可能依赖于操作系统

  • 如果
    SecurityManager
    checkRead()
    checkWrite()
    方法中存在安全冲突,则会引发
    SecurityException
    。如果存在操作系统权限问题,则不会引发异常



  • 此外,请注意,如果调用
    File.mkdir()
    ,并且父目录不存在,
    mkdir()
    将返回false。但是,调用
    File.mkdirs()
    将创建不存在的父目录。

    mkdir和mkdirs如果目录已经存在,则返回false,因此这可能是失败的原因之一

    如果您使用的是Java7,那么就可以使用Files类。它会在错误上抛出一个IOException,并给出了很好的描述

    Files.createDirectory(file.toPath());
    

    这里有一些特定于Windows的内容:在我的例子中,
    file.mkdir()
    方法因
    NoSuchFileException
    而失败,因为我试图在Windows上直接创建嵌套目录结构(例如,
    results\results\u ddmmyyyyy
    ,而不首先创建
    results
    目录)

    但是,完全相同的代码在我的Mac上运行良好,即Mac上没有引发此类异常,中间
    results
    目录是通过
    file.mkdir()
    方法隐式创建的


    希望这对将来的人有所帮助。

    如果目录已经存在或者创建目录时出错,则返回false。现在有一个有用的API。在
    Android
    API26或更高版本中需要!如果您尝试使用mkdir(“/path1/path2/”),则是否与“mkdir”具有向后兼容性;在执行命令之前,path1(父)文件夹不存在,mkdir将失败,它只能在现有文件夹中创建新文件夹,mkdirs可以创建所有文件夹-path1和path2。我对mkdirs的失败一无所知。希望如此help@Andiana对的这是因为Java的
    File.mkdir
    遵循Linux约定而不是Windows约定,并且它不创建中间目录
    File.mkdirs
    遵循Windows惯例,其行为类似于Linux中的
    mkdir--parents
    。说得好。不过,为了得到确切的原因,Michael下面的答案是最好的:使用Java的NIO包。
    Files.createDirectory(file.toPath());