ความแตกต่างระหว่าง mkdir () และ mkdirs () ใน java สำหรับ java.io.File [closed]


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
user7856586

มีความแตกต่างด้านประสิทธิภาพระหว่างทั้งสองหรือไม่? โดยเฉพาะอย่างยิ่งเมื่อมีไดเรกทอรีหลักอยู่แล้ว?
Joshua Pinter

คำตอบ:


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? ดูเหมือนว่า javadoc จะไม่ครอบคลุมด้านนี้
อรุณ

@Arun ตาม Javadoc จะส่งคืน "true if and only if the directory is created" ซึ่งฉันคิดว่าไม่ชัดเจนว่าสร้างขึ้นโดยการเรียกนี้หรือก่อนหน้านี้ คำตอบนี้ชี้ให้เห็นอดีต
Samuel Edwin Ward

mkdir และ mkdirs ส่งคืนทั้งเท็จในกรณีของฉัน -.- ใช้งานได้ถ้าฉันใช้แบ็กสแลชคู่ "\\" แต่ถ้าฉันทำ ".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()

สร้างไดเร็กทอรีเพียงครั้งละหนึ่งไดเร็กทอรีหากเป็นพาเรนต์ที่มีเพียงไดเร็กทอรีเดียว นอกจากนี้ยังสามารถสร้างไดเร็กทอรีย่อยได้ (หากมีพา ธ ที่ระบุเท่านั้น) และอย่าสร้างไดเร็กทอรีใด ๆ ระหว่างสองไดเร็กทอรีใด ๆ ดังนั้นจึงไม่สามารถสร้างไดเร็กทอรี smultiple ในไดเร็กทอรีเดียว

mkdirs()

สร้างไดเร็กทอรีหลายไดเร็กทอรี (ในระหว่างสองไดเร็กทอรีด้วย) พร้อมกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.