Unterschied zwischen mkdir () und mkdirs () in Java für java.io.File [geschlossen]


123

Kann mir jemand den Unterschied zwischen diesen beiden Methoden erklären:

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

23
Lesen Sie den Javadoc: mkdir vs mkdirs
assylias

2
Der neuere Weg, dies zu tun, ist die Verwendung der statischen Methoden Files.createDirectories und Files.createDirectory: docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
neves

Sie können "Datei nicht unterstützt" erhalten, nachdem Sie mkdir verwendet haben.
user7856586

Gibt es Leistungsunterschiede zwischen den beiden? Vor allem, wenn die übergeordneten Verzeichnisse bereits vorhanden sind?
Joshua Pinter

Antworten:


158

mkdirs()Erstellt auch übergeordnete Verzeichnisse in dem Pfad, den dies Filedarstellt.

Javadocs für mkdirs():

Erstellt das Verzeichnis mit diesem abstrakten Pfadnamen, einschließlich aller erforderlichen, aber nicht vorhandenen übergeordneten Verzeichnisse. Beachten Sie, dass es bei einem fehlgeschlagenen Vorgang möglicherweise gelungen ist, einige der erforderlichen übergeordneten Verzeichnisse zu erstellen.

Javadocs für mkdir():

Erstellt das Verzeichnis mit diesem abstrakten Pfadnamen.

Beispiel:

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

wird falsefür das erste [und es wird kein Verzeichnis erstellt] und truefür das zweite nachgeben , und Sie werden erstellt habennon_existing_dir/someDir


7
Weil Orakel wieder Links im Internet bricht : mkdirs () und mkdir ()
MyPasswordIsLasercats

@MyPasswordIsLasercats Vielen Dank, dass Sie mich informiert haben. Fest.
Amit

1
Wenn das Verzeichnis bereits vorhanden ist, wird mkdir()zurückgegeben trueoder false? Der Javadoc scheint diesen Aspekt nicht abzudecken.
Arun

@Arun, laut Javadoc wird "true genau dann zurückgegeben, wenn das Verzeichnis erstellt wurde", was meiner Meinung nach nicht eindeutig ist, ob es durch diesen Aufruf oder früher erstellt wurde. Diese Antwort legt die erstere nahe.
Samuel Edwin Ward

mkdir und mkdirs geben in meinem Fall -.- beide false zurück. Es funktioniert, wenn ich doppelten Backslash "\\" verwende, ABER: wenn ich ".toURI ()" mache, erhalte ich danach: Datei: / Users / MyName / Desktop /% 5Cnon_existing_dir% 5CsomeDir / und wenn ich ".getPath () "Ich erhalte" \ non_existing_dir \ someDir "und wenn ich" .getCanonicalPath () "mache, erhalte ich / Users / MyName / Desktop / \ non_existing_dir \ someDir
Aerox

62

mkdirs()erstellt den angegebenen Verzeichnispfad in seiner Gesamtheit, wobei mkdir()nur das unterste Verzeichnis erstellt wird. Dies schlägt fehl, wenn das übergeordnete Verzeichnis des Verzeichnisses, das erstellt werden soll, nicht gefunden werden kann.

Mit anderen Worten mkdir()ist wie mkdirund mkdirs()ist wie mkdir -p.

Stellen Sie sich zum Beispiel vor, wir haben ein leeres /tmpVerzeichnis. Der folgende Code

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

würde die folgenden Verzeichnisse erstellen:

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

Wo dieser Code:

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

würde keine Verzeichnisse erstellen - wie es nicht finden würde /tmp/one/two- und würde zurückkehren false.


4
mkdir()

Erstellt jeweils nur ein Verzeichnis, wenn es nur dieses übergeordnete Verzeichnis ist. Andernfalls kann das Unterverzeichnis erstellt werden (wenn nur der angegebene Pfad vorhanden ist) und keine Verzeichnisse zwischen zwei Verzeichnissen erstellt werden. Daher können nicht mehrere Verzeichnisse in einem Verzeichnis erstellt werden

mkdirs()

Erstellen Sie mehrere Verzeichnisse (auch zwischen zwei Verzeichnissen) gleichzeitig.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.