Różnica między mkdir () i mkdirs () w java dla java.io.File [zamknięty]

123

Czy ktoś może mi powiedzieć różnicę między tymi dwiema metodami:

  • file.mkdir()
  • file.mkdirs()
Krishna Kankal
źródło
23
Przeczytaj javadoc: mkdir vs mkdirs
assylias
2
Nowszym sposobem jest użycie metod statycznych Files.createDirectories i Files.createDirectory: docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
neves,
Po użyciu mkdir można uzyskać informację „Plik nie jest obsługiwany”.
user7856586
Czy są jakieś różnice w wydajności między nimi? Zwłaszcza, gdy katalogi nadrzędne już istnieją?
Joshua Pinter

Odpowiedzi:

158

mkdirs()tworzy również katalogi nadrzędne w ścieżce, którą Filereprezentuje.

javadocs dla mkdirs():

Tworzy katalog nazwany tą abstrakcyjną nazwą ścieżki, w tym wszystkie niezbędne, ale nieistniejące katalogi nadrzędne. Zwróć uwagę, że jeśli ta operacja się nie powiedzie, być może udało się utworzyć niektóre z niezbędnych katalogów nadrzędnych.

javadocs dla mkdir():

Tworzy katalog nazwany tą abstrakcyjną nazwą ścieżki.

Przykład:

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

ustąpi falseza pierwszym [i żaden katalog nie zostanie utworzony], i trueza drugim, a ty stworzysznon_existing_dir/someDir

dobrze
źródło
7
Ponieważ wyrocznia znowu łamie linki w Internecie: mkdirs () i mkdir ()
MyPasswordIsLasercats
@MyPasswordIsLasercats Dziękuję za poinformowanie mnie. naprawiony.
amit
1
Jeśli katalog już istnieje, mkdir()zwraca truelub false? Wydaje się, że javadoc nie obejmuje tego aspektu.
Arun
@Arun, zgodnie z Javadoc, zwraca „prawda wtedy i tylko wtedy, gdy katalog został utworzony”, co, jak przypuszczam, nie jest jednoznaczne, czy został utworzony przez to wywołanie czy wcześniej. Ta odpowiedź sugeruje to pierwsze.
Samuel Edwin Ward
mkdir i mkdirs zwracają oba false w moim przypadku -.-. Działa, jeśli użyję podwójnego ukośnika odwrotnego "\\", ALE: jeśli po tym otrzymam: plik: / Users / MyName / Desktop /% 5Cnon_existing_dir% 5CsomeDir / i jeśli to zrobię ".getPath ()" .toURI () " "Otrzymuję" \ non_existing_dir \ someDir ", a jeśli to zrobię" .getCanonicalPath () "otrzymuję / Users / MyName / Desktop / \ non_existing_dir \ someDir
Aerox
62

mkdirs()utworzy podaną ścieżkę katalogu w całości, gdzie mkdir()utworzy tylko najniższy katalog, niepowodzeniem, jeśli nie może znaleźć katalogu nadrzędnego katalogu, który próbuje utworzyć.

Innymi słowy mkdir()jest jak mkdiri mkdirs()jest jak mkdir -p.

Na przykład wyobraź sobie, że mamy pusty /tmpkatalog. Poniższy kod

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

utworzy następujące katalogi:

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

Gdzie ten kod:

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

nie utworzy żadnych katalogów - których nie znajdzie /tmp/one/two- i zwróci false.

Dave Webb
źródło
4
mkdir()

tworzy tylko jeden katalog na raz, jeśli jest tylko tym katalogiem nadrzędnym. w przeciwnym razie może utworzyć podkatalog (jeśli istnieje tylko określona ścieżka) i nie tworzyć żadnych katalogów pomiędzy dwoma dowolnymi katalogami. więc nie może tworzyć wielu katalogów w jednym katalogu

mkdirs()

tworzyć wiele katalogów (także między dwoma katalogami) naraz.

Durga Rao
źródło