Trong khi java.io.RandomAccessFile
có một close()
phương pháp java.io.File
không. Tại sao vậy? Tệp có tự động đóng khi hoàn thành hay gì đó không?
Cảm ơn!
Trong khi java.io.RandomAccessFile
có một close()
phương pháp java.io.File
không. Tại sao vậy? Tệp có tự động đóng khi hoàn thành hay gì đó không?
Cảm ơn!
Câu trả lời:
Javadoc của File
lớp mô tả lớp là:
Một đại diện trừu tượng của tên đường dẫn tệp và thư mục.
File
chỉ là một đại diện của tên đường dẫn, với một số phương pháp liên quan đến hệ thống tệp (như exists()
) và xử lý thư mục nhưng đầu vào và đầu ra trực tuyến thực tế được thực hiện ở nơi khác. Các luồng có thể được mở và đóng, các tệp không thể.
(Ý kiến cá nhân của tôi là thật đáng tiếc khi Sun sau đó đã tiếp tục tạo ra RandomAccessFile
, gây ra nhiều nhầm lẫn với cách đặt tên không nhất quán của nó.)
java.io.File
không đại diện cho một tệp đang mở , nó đại diện cho một đường dẫn trong hệ thống tệp. Do đó có close
phương pháp trên nó không có ý nghĩa.
Trên thực tế, lớp học này đã được đặt tên sai bởi các tác giả thư viện, nó nên được gọi như thế nào Path
.
Path
hoàn toàn.
Về cơ bản, tệp truy cập ngẫu nhiên bao bọc các luồng đầu vào và đầu ra để quản lý quyền truy cập ngẫu nhiên. Bạn không mở và đóng một tệp, bạn mở và đóng các luồng vào một tệp.
Một BufferedReader có thể được mở và đóng nhưng một Tệp không bao giờ được mở, nó chỉ đại diện cho một đường dẫn trong hệ thống tệp.
Giả sử, bạn có
File f = new File("SomeFile");
f.length();
Bạn không cần phải đóng các File
s, bởi vì nó chỉ là đại diện của một đường dẫn.
Bạn luôn nên cân nhắc để chỉ đóng người đọc / người viết và trên thực tế là các luồng.