java.io.FileのJavaにおけるmkdir()とmkdirs()の違い[終了]


123

これらの2つの方法の違いを誰かに教えてもらえますか?

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

23
javadocをお読みください:mkdir vs mkdirs
assylias

2
それを行うための新しい方法がFiles.createDirectoriesとFiles.createDirectory静的メソッドを使用している:docs.oracle.com/javase/7/docs/api/java/nio/file/Files.htmlを
ネベス

mkdirを使用すると、「サポートされていないファイル」を取得できます。
user7856586 2018

2つの間にパフォーマンスの違いはありますか?特に親ディレクトリがすでに存在する場合はどうでしょうか?
Joshua Pinter、

回答:


158

mkdirs()また、これが表すパスに親ディレクトリを作成しますFile

Javadocについてmkdirs()

この抽象パス名で指定されたディレクトリを作成します。必要だが存在しない親ディレクトリも含まれます。この操作が失敗した場合、必要な親ディレクトリのいくつかを作成できている可能性があることに注意してください。

Javadocについてmkdir()

この抽象パス名で指定されたディレクトリを作成します。

例:

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

false最初のものは降伏し[dirは作成されません]、true2つ目は降ります。non_existing_dir/someDir


7
オラクルがインターネットのリンクを再び破壊しているため:mkdirs()およびmkdir()
MyPasswordIsLasercats '31

@MyPasswordIsLasercatsお知らせいただきありがとうございます。修繕。
2014年

1
ディレクトリがすでに存在する場合、mkdir()戻るtrueか、またはfalse?javadocはこの点をカバーしていないようです。
アルン

@ Arun、Javadocによると、「ディレクトリが作成された場合にのみtrue」を返します。これは、この呼び出しによって作成されたのか、それ以前に作成されたのかが不明確であると思います。 この答えは前者を示唆しています。
Samuel Edwin Ward

私の場合、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()

親である場合、一度に1つのディレクトリのみを作成します。それ以外の場合は、サブディレクトリを作成でき(指定されたパスが存在する場合のみ)、2つのディレクトリの間にディレクトリを作成しません。1つのディレクトリに複数のディレクトリを作成することはできません

mkdirs()

一度に複数のディレクトリ(2つのディレクトリの間にも)を作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.