ในขณะที่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();
คุณไม่จำเป็นต้องปิดFile
s เพราะมันเป็นเพียงการนำเสนอเส้นทาง
คุณควรพิจารณาปิดเฉพาะผู้อ่าน / นักเขียนและสตรีมเท่านั้น