java.io.File的java中mkdir()和mkdirs()之间的区别[关闭]

Posted

技术标签:

【中文标题】java.io.File的java中mkdir()和mkdirs()之间的区别[关闭]【英文标题】:Difference between mkdir() and mkdirs() in java for java.io.File [closed] 【发布时间】:2012-04-06 21:14:17 【问题描述】:

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

file.mkdir() file.mkdirs()

【问题讨论】:

阅读 javadoc:mkdir vs mkdirs 较新的方法是使用 Files.createDirectories 和 Files.createDirectory 静态方法:docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html 使用mkdir后会得到“File not supported”。 两者之间有性能差异吗? 尤其是当父目录已经存在时? 【参考方案1】:

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

【讨论】:

因为 oracle 再次断开互联网中的链接:mkdirs() 和 mkdir() @MyPasswordIsLasercats 谢谢你让我知道。固定。 如果目录已经存在,mkdir()返回true还是false? javadoc 似乎没有涵盖这方面。 @Arun,根据 Javadoc,它返回“当且仅当创建了目录时才为真”,我想这对于它是由这个调用还是更早创建是模棱两可的。 This answer 建议前者。 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【参考方案2】:
mkdir()

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

mkdirs()

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于java.io.File的java中mkdir()和mkdirs()之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

高效开发:Java创建文件夹的4种方法及其优缺点

高效开发:Java创建文件夹的4种方法及其优缺点

第九章:IO流

Java IO -- File类

android java.io.File.fixSlashes(File.java:185)

第一节:Java之文件系统操作(Java.io.File)