“สวัสดี อามีโก้ ไม่เจอกันนานเลยนะ”
"สวัสดี บิลาโบ คุณจะคุยเรื่องอะไร"
"วันนี้ฉันจะบอกคุณเกี่ยวกับการทำงานกับไฟล์ Java มีคลาสพิเศษ (ไฟล์) ที่คุณสามารถใช้จัดการไฟล์ในฮาร์ดไดรฟ์ สำหรับการจัดการเนื้อหาไฟล์ มีคลาสอื่น ๆ เช่น FileInputStream, FileOutputStream เป็นต้น "
"น่าสนใจ แต่เมื่อคุณพูดว่า 'จัดการไฟล์' คุณหมายถึงอะไร"
"นั่นคือสิ่งที่ฉันจะอธิบายในตอนนี้ ไฟล์สามารถสร้าง ลบ เปลี่ยนชื่อ และอื่นๆ อีกมากมาย คุณสามารถส่งวัตถุไฟล์ไปยังทุกคลาสที่ทำงานกับ (อ่าน เขียน เปลี่ยนแปลง) เนื้อหาของไฟล์ได้ . ตัวอย่างเช่น:"
FileInputStream input = new FileInputStream("c:/path/a.txt");
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());
}
"อืม ถูกต้อง"
"แต่มันค่อนข้างสับสนเล็กน้อยที่คลาสเดียวกัน ― ไฟล์ ― ใช้สำหรับทั้งไฟล์และไดเร็กทอรี นั่นดูไม่สมเหตุสมผลสำหรับฉันเลย"
"มันเป็นแบบนั้นด้วยเหตุผลทางประวัติศาสตร์ ไดเร็กทอรีเคยเป็นไฟล์พิเศษ 'ว่าง' บนดิสก์ แน่นอนว่าตอนนี้หลายอย่างเปลี่ยนไป แต่ไม่ใช่ทุกอย่าง นั่นคือทั้งหมดที่ฉันมีในวันนี้"
"ขอบคุณสำหรับบทเรียนที่น่าสนใจ บิลาโบ"
GO TO FULL VERSION