ทำไม java.io.File ไม่มีเมธอด close ()


123

ในขณะที่java.io.RandomAccessFileมีclose()วิธีการjava.io.Fileไม่ ทำไมถึงเป็นเช่นนั้น? ไฟล์ถูกปิดโดยอัตโนมัติเมื่อทำการสรุปหรืออะไร?

ขอบคุณ!


3
หากคุณดู Java API คุณจะสามารถรับคำตอบได้ทันที
gigadot

43
ฉันได้เรียนรู้ว่าผู้คนมีประโยชน์มากกว่าสเปค Java ที่ยอดเยี่ยม
Albus Dumbledore

6
b / c ไม่สามารถเปิดได้ :)
bestsss

6
เพราะไม่ได้เปิดอะไร. และผู้คนมีความน่าเชื่อถือน้อยกว่าข้อกำหนด Java อย่างเป็นทางการ
Marquis of Lorne

คำตอบ:


141

javadoc ของFileคลาสอธิบายคลาสเป็น:

การแสดงนามธรรมของชื่อพา ธ ไฟล์และไดเร็กทอรี

File เป็นเพียงการแสดงชื่อพา ธ โดยมีวิธีการบางอย่างที่เกี่ยวข้องกับระบบไฟล์ (เช่น exists() ) และการจัดการไดเร็กทอรี แต่อินพุตและเอาต์พุตการสตรีมจริงจะทำที่อื่น สตรีมสามารถเปิดและปิดไฟล์ไม่ได้

(ความเห็นส่วนตัวคิดว่าค่อนข้างโชคร้ายที่ซันไปสร้างต่อRandomAccessFileทำให้เกิดความสับสนกับการตั้งชื่อที่ไม่สอดคล้องกัน)


72

java.io.Fileไม่ได้แสดงถึงไฟล์ที่เปิดอยู่แต่แสดงถึงเส้นทางในระบบไฟล์ ดังนั้นการมีcloseวิธีการกับมันจึงไม่สมเหตุสมผล

Pathที่จริงแล้วชั้นนี้ถูกเรียกไม่ถูกโดยผู้เขียนห้องสมุดก็ควรจะเรียกว่าสิ่งที่ต้องการ


แต่แล้ววิธีการแสดงรายการไดเรกทอรีทั้งหมดล่ะ? พวกเขาควรจะแยกออกจากกันโดยPathสิ้นเชิง
biziclop

3
เห็นด้วย แต่ไม่ว่าในกรณีใดไฟล์หรือ RandomAccessFile มีชื่อไม่ถูกต้อง บางอย่างเช่น RandomAccessFileStream อาจดีกว่า แต่ตอนนี้หลายปีแล้ว
maaartinus

7
"อันที่จริงผู้เขียนห้องสมุดเรียกชื่อชั้นนี้ไม่ถูกต้องควรเรียกว่า Path" -> พวกเขาได้ยินคุณ ในแพ็กเกจ nio (New I / O) ตอนนี้ classe ที่คล้ายกันจะถูกตั้งชื่อว่า Path docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
นาที

6

ไฟล์เข้าถึงโดยสุ่มโดยพื้นฐานแล้วจะรวมสตรีมอินพุตและเอาต์พุตเพื่อจัดการการเข้าถึงแบบสุ่ม คุณไม่ได้เปิดและปิดไฟล์คุณเปิดและปิดสตรีมไปยังไฟล์


1
ใช่. ฉันไม่เคยดู java.io.RandomAccessFile มากนัก ฉันมักจะคิดว่ามันทับ java.io.File แต่มันไม่ได้! ไฟล์แสดงเส้นทาง RandomAccessFile เป็นอ็อบเจ็กต์ที่สามารถดำเนินการดิสก์ I / O ได้ตามที่สตรีมสามารถทำได้แม้ว่าจะมีการใช้งานที่แตกต่างกันมากเพื่อให้สามารถเข้าถึงแบบสุ่มแทนที่จะเป็นสตรีม
Steve Cohen

6

BufferedReader สามารถเปิดและปิดได้ แต่ไฟล์จะไม่ถูกเปิดเพียงแค่แสดงเส้นทางในระบบไฟล์


4

สมมติว่าคุณมี

File f  = new File("SomeFile");
f.length();

คุณไม่จำเป็นต้องปิดFiles เพราะมันเป็นเพียงการนำเสนอเส้นทาง

คุณควรพิจารณาปิดเฉพาะผู้อ่าน / นักเขียนและสตรีมเท่านั้น

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