“สวัสดี อามีโก้ ไม่เจอกันนานเลยนะ”

"สวัสดี บิลาโบ คุณจะคุยเรื่องอะไร"

"วันนี้ฉันจะบอกคุณเกี่ยวกับการทำงานกับไฟล์  Java มีคลาสพิเศษ (ไฟล์) ที่คุณสามารถใช้จัดการไฟล์ในฮาร์ดไดรฟ์ สำหรับการจัดการเนื้อหาไฟล์ มีคลาสอื่น ๆ เช่น FileInputStream, FileOutputStream เป็นต้น "

ไฟล์ ไฟล์ เส้นทาง - 1

"น่าสนใจ แต่เมื่อคุณพูดว่า 'จัดการไฟล์' คุณหมายถึงอะไร"

"นั่นคือสิ่งที่ฉันจะอธิบายในตอนนี้ ไฟล์สามารถสร้าง ลบ เปลี่ยนชื่อ และอื่นๆ อีกมากมาย คุณสามารถส่งวัตถุไฟล์ไปยังทุกคลาสที่ทำงานกับ (อ่าน เขียน เปลี่ยนแปลง) เนื้อหาของไฟล์ได้ . ตัวอย่างเช่น:"

คุณสามารถส่งชื่อไฟล์ไปยัง FileInputStream ได้โดยตรง
FileInputStream input = new FileInputStream("c:/path/a.txt");
หรือคุณสามารถสร้างวัตถุไฟล์แยกกัน แล้วส่งต่อไปยัง FileInputStrea
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

"แต่ตัวเลือกที่สองนั้นยาวกว่า ฉันยังไม่เข้าใจว่าเหตุใดเราจึงต้องการวัตถุไฟล์เหล่านี้"

"สำหรับตัวอย่างเฉพาะนี้ คุณพูดถูก" นี่ไม่ใช่ตัวอย่างว่าคุณต้องทำอย่างไร แต่เป็นวิธีที่คุณสามารถทำได้
แต่ลองจินตนาการว่าคุณต้องแสดงรายการไฟล์ทั้งหมดที่อยู่ในไดเร็กทอรีเฉพาะ ต่อไปนี้เป็นวิธีที่สามารถทำได้โดยใช้วัตถุไฟล์:"

รหัส
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

" listFiles()เป็นเมธอดที่ส่งคืนรายการไฟล์ในโฟลเดอร์ที่ระบุโดย «c:/path/» หรือไม่

"ใช่ แต่โปรแกรมเมอร์มักจะพูดว่า 'ไดเร็กทอรี' คำว่า 'โฟลเดอร์' ถูกนำมาใช้ค่อนข้างเร็ว แต่โดยหลักการแล้ว ทั้งสองคำนั้นถูกต้อง และคุณสามารถพูดอะไรก็ได้ที่คุณต้องการ"

"ตกลง แล้วgetName () ทำหน้าที่อะไร คืนชื่อไฟล์ อะไรรวมอยู่ในชื่อกันแน่ ชื่อเต็มรวมถึงพาธ หรือแค่ชื่อไฟล์เอง"

"เฉพาะชื่อไฟล์เท่านั้น สำหรับเส้นทางแบบเต็ม มี file.getAbsolutePath()"

"แล้วคลาส File มีเมธอดอะไรอีกบ้าง"

"ดูที่นี้:"

วิธี คำอธิบาย
boolean isDirectory() File object เป็นไดเร็กทอรีหรือไม่?
boolean isFile() วัตถุเป็นไฟล์หรือไม่
long length() ส่งกลับขนาด / ความยาวไฟล์เป็นไบต์
boolean createNewFile() สร้างไฟล์เปล่าใหม่ ถ้ายังไม่มีไฟล์ชื่อนี้
boolean mkdir() สร้างไดเร็กทอรี ชื่อ «mkdir» มาจาก «สร้างไดเร็กทอรี»
boolean mkdirs() สร้างไดเร็กทอรีและไดเร็กทอรีย่อยทั้งหมด
boolean delete() ลบไฟล์ที่เกี่ยวข้องกับวัตถุ หากวัตถุเป็นไดเร็กทอรี ไดเร็กทอรีจะถูกลบก็ต่อเมื่อไม่มีไฟล์อยู่ในนั้น
void deleteOnExit() เพิ่มไฟล์ลงในรายการไฟล์พิเศษที่จะถูกลบโดยอัตโนมัติเมื่อออกจากโปรแกรม
File createTempFile(
String prefix,
String suffix,
File directory)
สร้างไฟล์ชั่วคราวด้วยชื่อเฉพาะที่สร้างขึ้นแบบสุ่ม เช่น «dasd4d53sd»
พารามิเตอร์เพิ่มเติมคือคำนำหน้าชื่อและคำต่อท้าย หากไม่ได้ระบุไดเร็กทอรี ไฟล์จะถูกสร้างขึ้นในไดเร็กทอรี OS พิเศษสำหรับไฟล์ชั่วคราว
boolean exists() คืนค่าจริงหากมีไฟล์ชื่อเดียวกันอยู่ในฮาร์ดไดรฟ์
String getAbsolutePath() ส่งคืนเส้นทางแบบเต็มของไฟล์พร้อมไดเร็กทอรีย่อยทั้งหมด
String getCanonicalPath() ส่งกลับเส้นทางไฟล์ตามรูปแบบบัญญัติ
ตัวอย่างเช่น แปลงพาธ «c:/dir/dir2/../a.txt» เป็น «c:/dir/a.txt»
String[] list() ส่งกลับอาร์เรย์ของชื่อไฟล์ที่อยู่ในไดเร็กทอรีที่แสดงโดยวัตถุปัจจุบัน
File[] listFiles() ส่งกลับอาร์เรย์ของไฟล์ที่อยู่ในไดเร็กทอรีที่แสดงโดยวัตถุไฟล์ปัจจุบัน
long getTotalSpace() ส่งกลับจำนวนพื้นที่ทั้งหมด (จำนวนไบต์) บนดิสก์ที่มีไฟล์อยู่
long getFreeSpace() ส่งกลับจำนวนพื้นที่ว่าง (จำนวนไบต์) บนดิสก์ที่มีไฟล์อยู่
boolean renameTo(File) เปลี่ยนชื่อไฟล์ กล่าวคือ เนื้อหาของไฟล์ได้รับชื่อใหม่ คุณสามารถเปลี่ยนชื่อไฟล์ «c:/dir/a.txt» เป็น «d:/out/text/b.doc»
String getName() ส่งกลับเฉพาะชื่อไฟล์โดยไม่มีเส้นทาง
String getParent() ส่งกลับเฉพาะเส้นทาง (ไดเร็กทอรี) ไปยังไฟล์ปัจจุบัน โดยไม่มีชื่อ
Path toPath() ส่งคืนวัตถุเส้นทางที่สอดคล้องกับวัตถุไฟล์ปัจจุบัน

"โอ้โห! ไม่ใช่รายการเล็กๆ หรอกเหรอ และดูเหมือนว่าคุณจะทำอะไรได้หลายอย่างกับมัน สร้างและลบไฟล์ เปลี่ยนชื่อมัน..."

"เพื่อให้ได้ไดเร็กทอรีของไฟล์ปัจจุบัน ฉันต้องเรียก getParent()?"

"ใช่ แต่มันคืนค่าสตริง ― เส้นทางของไฟล์ ― ไม่ใช่วัตถุไฟล์ อันที่จริง คลาสไฟล์จะทำซ้ำเมธอดของมันเกือบทั้งหมด เวอร์ชันหนึ่งส่งคืนสตริง ส่วนอีกเวอร์ชัน - วัตถุไฟล์ ลองดูสิ:"

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

หากคุณมีสตริงที่มีเส้นทางของไฟล์และคุณต้องการ วัตถุ ไฟล์ให้ใช้ตัวสร้าง หากสถานการณ์กลับด้าน (คุณมี วัตถุ ไฟล์แต่คุณต้องมีสตริง) ให้ใช้getAbsolutePath () ตัวอย่างเช่น:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"เข้าใจแล้ว."

"เยี่ยมมาก ต่อไปนี้เป็นงานเล็กๆ สำหรับคุณ: แสดงชื่อไฟล์ทั้งหมดที่อยู่ในไดเร็กทอรีเดียวกันกับไฟล์ปัจจุบัน"

"ไม่มีอะไรจะง่ายไปกว่านี้อีกแล้ว ดูสิ:"

รหัส
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"อืม ถูกต้อง"

"แต่มันค่อนข้างสับสนเล็กน้อยที่คลาสเดียวกัน ― ไฟล์ ― ใช้สำหรับทั้งไฟล์และไดเร็กทอรี นั่นดูไม่สมเหตุสมผลสำหรับฉันเลย"

"มันเป็นแบบนั้นด้วยเหตุผลทางประวัติศาสตร์ ไดเร็กทอรีเคยเป็นไฟล์พิเศษ 'ว่าง' บนดิสก์ แน่นอนว่าตอนนี้หลายอย่างเปลี่ยนไป แต่ไม่ใช่ทุกอย่าง นั่นคือทั้งหมดที่ฉันมีในวันนี้"

"ขอบคุณสำหรับบทเรียนที่น่าสนใจ บิลาโบ"