Разница между mkdir () и mkdirs () в java для java.io.File [закрыто]

123

Может ли кто-нибудь сказать мне разницу между этими двумя методами:

  • 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 05
Есть ли разница в производительности между ними? Особенно, когда родительские каталоги уже существуют?
Джошуа Пинтер,

Ответы:

158

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

Амит
источник
7
Потому что oracle снова ломает ссылки в Интернете: mkdirs () и mkdir ()
MyPasswordIsLasercats
@MyPasswordIsLasercats Спасибо, что сообщили мне. фиксированный.
amit
1
Если каталог уже существует, mkdir()вернуть trueили false? Javadoc, похоже, не охватывает этот аспект.
Arun
@Arun, согласно Javadoc, он возвращает «истину, если и только если каталог был создан», что, как я полагаю, неоднозначно относительно того, был ли он создан этим вызовом или ранее. Этот ответ предполагает первое.
Сэмюэл Эдвин Уорд,
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(), нравится mkdirи mkdirs()нравится 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()

создает только один каталог за раз, если он родительский. в противном случае он может создать подкаталог (если существует только указанный путь) и не создавать никаких каталогов между любыми двумя каталогами. поэтому он не может создавать несколько каталогов в одном каталоге

mkdirs()

создавать несколько каталогов (также между двумя каталогами) за раз.

Дурга Рао
источник