java.io.File的java中mkdir()和mkdirs()之间的区别


123

谁能告诉我这两种方法之间的区别:

  • file.mkdir()
  • file.mkdirs()

23
阅读Javadoc:mkdir vs mkdirs
assylias 2012年

2
较新的方法是使用Files.createDirectories和Files.createDirectory静态方法:docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
neves

使用mkdir后,您可以获得“不支持的文件”。
user7856586'4

两者之间是否有性能差异?特别是当父目录已经存在时?
约书亚·品特

Answers:


158

mkdirs()还在此表示的路径中创建父目录File

javadocs用于mkdirs()

创建以此抽象路径名命名的目录,包括任何必需但不存在的父目录。请注意,如果此操作失败,则可能已成功创建了一些必要的父目录。

javadocs用于mkdir()

创建以此抽象路径名命名的目录。

例:

File  f = new File("non_existing_dir/someDir");
System.out.println(f.mkdir());
System.out.println(f.mkdirs());

将产生false第一个[并且不会创建目录],然后true产生第二个,您将创建non_existing_dir/someDir


7
因为oracle再次破坏了Internet中的链接:mkdirs()mkdir()
MyPasswordIsLasercats

@MyPasswordIsLasercats感谢您让我知道。固定。
2014年

1
如果目录已经存在,则mkdir()返回truefalse?Javadoc似乎没有涵盖这方面。
阿伦(Arun)2015年

@Arun,根据Javadoc,它返回“当且仅当创建目录时才返回true”,我想这是否是通过此调用或更早的调用创建的是模棱两可的。 这个答案暗示了前者。
塞缪尔·埃德温·沃德

在我的情况下,mkdir和mkdirs都返回false -.-。如果我使用双反斜杠“ \\”但它起作用:但是如果之后我执行“ .toURI()”,则我收到:file:/ Users / MyName / Desktop /%5Cnon_existing_dir%5CsomeDir /并且如果我执行了“ .getPath() “我收到” \ non_existing_dir \ someDir“,如果我执行” .getCanonicalPath()“,我收到/ Users / MyName / Desktop / \ non_existing_dir \ someDir
Aerox

62

mkdirs()将完整地创建指定的目录路径,该目录路径mkdir()仅创建最底部的目录,如果找不到要创建的目录的父目录,则失败。

换句话说mkdir()就像mkdirmkdirs()一样mkdir -p

例如,假设我们有一个空/tmp目录。以下代码

new File("/tmp/one/two/three").mkdirs();

将创建以下目录:

  • /tmp/one
  • /tmp/one/two
  • /tmp/one/two/three

此处的代码:

new File("/tmp/one/two/three").mkdir();

不会创建任何目录-因为找不到/tmp/one/two-并会返回false


4
mkdir()

如果是父目录,则一次仅创建一个目录。否则,它可以创建子目录(如果仅存在指定路径),并且不能在任何两个目录之间创建任何目录。因此它不能在一个目录中创建多个目录

mkdirs()

一次创建多个目录(也在两个目录之间)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.