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