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()

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


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.