Sự khác biệt giữa mkdir () và mkdirs () trong java cho java.io.File [đã đóng]


123

Bất cứ ai có thể cho tôi biết sự khác biệt giữa hai phương pháp này:

  • file.mkdir()
  • file.mkdirs()

23
Đọc javadoc: mkdir vs mkdirs
assylias

2
Cách mới hơn để làm điều đó là sử dụng các phương thức tĩnh Files.createDirectories và Files.createDirectory: docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
neves

Bạn có thể nhận được "Tệp không được hỗ trợ" sau khi sử dụng mkdir.
user7856586

Có sự khác biệt nào về hiệu suất giữa hai loại không? Đặc biệt là khi các thư mục mẹ đã tồn tại?
Joshua Pinter

Câu trả lời:


158

mkdirs()cũng tạo các thư mục mẹ trong đường dẫn mà nó Fileđại diện.

javadocs cho mkdirs():

Tạo thư mục được đặt tên theo tên đường dẫn trừu tượng này, bao gồm mọi thư mục mẹ cần thiết nhưng không tồn tại. Lưu ý rằng nếu thao tác này không thành công, nó có thể đã thành công trong việc tạo một số thư mục mẹ cần thiết.

javadocs cho mkdir():

Tạo thư mục được đặt tên theo tên đường dẫn trừu tượng này.

Thí dụ:

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

sẽ mang lại lợi nhuận falsecho lần đầu tiên [và không có dir nào được tạo ra], và truecho lần thứ hai, và bạn sẽ tạonon_existing_dir/someDir


7
Bởi vì oracle được phá vỡ các liên kết trong mạng Internet một lần nữa: mkdirs ()mkdir ()
MyPasswordIsLasercats

@MyPasswordIsLasercats Cảm ơn bạn đã cho tôi biết. đã sửa.
amit

1
Nếu thư mục đã tồn tại, có mkdir()trả về truehay falsekhông? Javadoc dường như không đề cập đến khía cạnh này.
Arun

@Arun, theo Javadoc, nó trả về "true nếu và chỉ khi thư mục được tạo", mà tôi cho là không rõ ràng về việc nó được tạo bởi cuộc gọi này hay trước đó. Câu trả lời này gợi ý cho người trước.
Samuel Edwin Ward

mkdir và mkdirs trả về cả hai sai trong trường hợp của tôi -.-. Nó hoạt động nếu tôi sử dụng dấu gạch chéo ngược kép "\\" NHƯNG: nếu tôi làm ".toURI ()" thì sau đó tôi nhận được: file: / Users / MyName / Desktop /% 5Cnon_existing_dir% 5CsomeDir / và nếu tôi làm ".getPath () "tôi nhận được "\ non_existing_dir \ someDir" và nếu tôi làm" .getCanonicalPath ()" tôi nhận / Users / myname / Desktop / \ non_existing_dir \ someDir
Aerox

62

mkdirs()sẽ tạo toàn bộ đường dẫn thư mục được chỉ định, nơi mkdir()sẽ chỉ tạo thư mục dưới cùng nhất, không thành công nếu nó không thể tìm thấy thư mục mẹ của thư mục mà nó đang cố gắng tạo.

Nói cách khác mkdir()là thích mkdirmkdirs()giống như mkdir -p.

Ví dụ, hãy tưởng tượng chúng ta có một /tmpthư mục trống . Đoạn mã sau

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

sẽ tạo các thư mục sau:

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

Nơi mã này:

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

sẽ không tạo bất kỳ thư mục nào - vì nó sẽ không tìm thấy /tmp/one/two- và sẽ trả về false.


4
mkdir()

chỉ tạo một thư mục tại một thời điểm, nếu chỉ tạo một thư mục chính. khôn ngoan khác, nó có thể tạo thư mục con (nếu đường dẫn được chỉ định chỉ tồn tại) và không tạo bất kỳ thư mục nào ở giữa hai thư mục bất kỳ. vì vậy nó không thể tạo nhiều thư mục trong một thư mục

mkdirs()

tạo nhiều thư mục (ở giữa hai thư mục) cùng một lúc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.