Різниця між 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
NEVES

Ви можете отримати "Файл не підтримується" після використання mkdir.
користувач7856586

Чи є якісь відмінності між ними? Особливо, коли батьківські каталоги вже існують?
Джошуа Пінтер

Відповіді:


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 Дякую, що повідомили мені. фіксований.
Аміт

1
Якщо каталог вже існує, mkdir()повертається trueчи false? Здається, явадок не висвітлює цей аспект.
Арун

@Arun, згідно з Javadoc, він повертає "істинно, якщо і тільки якщо каталог був створений", що, напевно, є неоднозначним щодо того, був він створений цим викликом чи раніше. Ця відповідь наводить на думку першого.
Семюель Едвін Уорд

mkdir та mkdirs повертають обидва помилкові в моєму випадку -.-. Він працює, якщо я використовую подвійний нахил "\\" АЛЕ, якщо я роблю ".toURI ()" після цього я отримую: file: / Users / MyName / Desktop /% 5Cnon_existing_dir% 5CsomeDir / і якщо я це роблю ".getPath () "я отримую" \ non_existing_dir \ someDir ", і якщо я роблю" .getCanonicalPath () "я отримую / Користувачі / 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.