ในขณะที่java.io.RandomAccessFileมีclose()วิธีการjava.io.Fileไม่ ทำไมถึงเป็นเช่นนั้น? ไฟล์ถูกปิดโดยอัตโนมัติเมื่อทำการสรุปหรืออะไร?
ขอบคุณ!
ในขณะที่java.io.RandomAccessFileมีclose()วิธีการjava.io.Fileไม่ ทำไมถึงเป็นเช่นนั้น? ไฟล์ถูกปิดโดยอัตโนมัติเมื่อทำการสรุปหรืออะไร?
ขอบคุณ!
คำตอบ:
javadoc ของFileคลาสอธิบายคลาสเป็น:
การแสดงนามธรรมของชื่อพา ธ ไฟล์และไดเร็กทอรี
File เป็นเพียงการแสดงชื่อพา ธ โดยมีวิธีการบางอย่างที่เกี่ยวข้องกับระบบไฟล์ (เช่น exists() ) และการจัดการไดเร็กทอรี แต่อินพุตและเอาต์พุตการสตรีมจริงจะทำที่อื่น สตรีมสามารถเปิดและปิดไฟล์ไม่ได้
(ความเห็นส่วนตัวคิดว่าค่อนข้างโชคร้ายที่ซันไปสร้างต่อRandomAccessFileทำให้เกิดความสับสนกับการตั้งชื่อที่ไม่สอดคล้องกัน)
java.io.Fileไม่ได้แสดงถึงไฟล์ที่เปิดอยู่แต่แสดงถึงเส้นทางในระบบไฟล์ ดังนั้นการมีcloseวิธีการกับมันจึงไม่สมเหตุสมผล
Pathที่จริงแล้วชั้นนี้ถูกเรียกไม่ถูกโดยผู้เขียนห้องสมุดก็ควรจะเรียกว่าสิ่งที่ต้องการ
Pathสิ้นเชิง
ไฟล์เข้าถึงโดยสุ่มโดยพื้นฐานแล้วจะรวมสตรีมอินพุตและเอาต์พุตเพื่อจัดการการเข้าถึงแบบสุ่ม คุณไม่ได้เปิดและปิดไฟล์คุณเปิดและปิดสตรีมไปยังไฟล์
BufferedReader สามารถเปิดและปิดได้ แต่ไฟล์จะไม่ถูกเปิดเพียงแค่แสดงเส้นทางในระบบไฟล์
สมมติว่าคุณมี
File f = new File("SomeFile");
f.length();
คุณไม่จำเป็นต้องปิดFiles เพราะมันเป็นเพียงการนำเสนอเส้นทาง
คุณควรพิจารณาปิดเฉพาะผู้อ่าน / นักเขียนและสตรีมเท่านั้น