Разница между 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()

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.