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

San*_*dal 39 java javadoc file mkdir

为什么file.mkdir返回false?

Google表示可能有多种原因(例如安全性,权限,路径名等).

我的问题:

  1. 如何找到返回false的确切原因?
  2. 如果安全/权限是一个原因,那么为什么不抛出SecurityException?

Mic*_*sel 44

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

如果您使用的是Java 7,则可以使用Files类.它会在错误时引发IOException并带有非常好的描述.

Files.createDirectory(file.toPath());
Run Code Online (Sandbox Code Playgroud)

  • 如果目录已存在或创建目录时出错,则返回false.现在有一个有用的API. (9认同)

Bri*_*ian 27

如果安全/权限是一个原因,那么为什么不抛出SecurityException(在javadoc中提到)?

SecurityException如果您没有JVM级别的权限来执行某些操作,而不是操作系统级别,则抛出A.

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

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

但是,如果您使用的是Java 7或更高版本,则可以使用NIO来创建目录.具体来说,Files.createDirectory:

File dir = new File("mydir");
Files.createDirectory(dir.toPath());
Run Code Online (Sandbox Code Playgroud)

如果您想完全使用NIO java.io.File,可以使用Paths.get创建Path代替:

Path dir = Paths.get("mydir");
Files.createDirectory(dir);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,如果无法创建目录,它将IOException提供一个确切原因,说明操作失败的原因.

这对于大多数方法都是如此Files,因此建议使用它而不是使用File类中的方法.


Jon*_*Lin 8

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

  2. SecurityException,如果有一个安全冲突中被抛出SecurityManagercheckRead()checkWrite()方法.如果存在操作系统权限问题,则不会抛出异常.


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