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

时间:2012-08-30 17:57:38

标签: java file javadoc mkdir

为什么file.mkdir返回false?

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

我的问题:

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

4 个答案:

答案 0 :(得分:43)

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

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

Files.createDirectory(file.toPath());

答案 1 :(得分:24)

  

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

如果您没有JVM级权限来执行某些操作,而不是操作系统级别

,则会引发SecurityException
  

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

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

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

File dir = new File("mydir");
Files.createDirectory(dir.toPath());

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

Path dir = Paths.get("mydir");
Files.createDirectory(dir);

在这两种情况下,如果无法创建目录,它将抛出一个IOException,其中包含操作失败原因的确切原因。

对于Files中的大多数方法都是如此,因此建议使用File类中的方法。

答案 2 :(得分:8)

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

  2. 如果SecurityException的{​​{1}}和SecurityManager方法存在安全规则,则会引发checkRead()。如果存在操作系统权限问题,则不会抛出异常。


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

答案 3 :(得分:1)

这是Windows特有的内容:在我的情况下,file.mkdir()方法因NoSuchFileException而失败,因为我试图直接创建嵌套目录结构(例如results\results_ddMMyyyy,而没有先创建Windows上的results目录。

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

希望这对以后的人有帮助。