Mengapa java.io.File tidak memiliki metode close ()?

123

Sementara java.io.RandomAccessFilememang memiliki close()metode java.io.Filetidak. Mengapa demikian? Apakah file ditutup secara otomatis saat finalisasi atau sesuatu?

Terima kasih!

Albus Dumbledore
sumber
3
Jika Anda melihat ke dalam Java API, Anda akan segera mendapatkan jawabannya.
gigadot
43
Saya telah belajar bahwa orang-orang lebih membantu daripada spesifikasi Java yang luar biasa.
Albus Dumbledore
6
b / c tidak bisa dibuka :)
bestsss
6
Karena tidak membuka apapun. Dan orang-orang kurang dapat diandalkan dibandingkan spesifikasi resmi Java.
Marquis dari Lorne

Jawaban:

141

Javadoc Filekelas mendeskripsikan kelas sebagai:

Representasi abstrak dari nama jalur file dan direktori.

File hanyalah representasi dari nama path, dengan beberapa metode yang berhubungan dengan filesystem (seperti exists() ) dan penanganan direktori tetapi streaming input dan output dilakukan di tempat lain. Aliran dapat dibuka dan ditutup, file tidak bisa.

(Pendapat pribadi saya adalah agak disayangkan bahwa Sun kemudian menciptakan RandomAccessFile, menyebabkan banyak kebingungan dengan penamaan yang tidak konsisten.)

biziclop
sumber
72

java.io.Filetidak mewakili file yang terbuka , ini mewakili jalur di sistem file. Oleh karena itu, memiliki closemetode di atasnya tidak masuk akal.

Sebenarnya, kelas ini salah dinamai oleh penulis perpustakaan, seharusnya disebut seperti Path.

axtavt
sumber
Tetapi bagaimana dengan semua metode daftar direktori? Mereka seharusnya dipisahkan dari yang Pathsepenuhnya.
biziclop
3
Setuju, tetapi dalam kasus apa pun, File atau RandomAccessFile salah diberi nama. Sesuatu seperti RandomAccessFileStream bisa lebih baik, tetapi sudah terlambat bertahun-tahun sekarang.
maaartinus
7
"Sebenarnya, kelas ini salah dinamai oleh penulis perpustakaan, seharusnya disebut sesuatu seperti Path" -> Mereka mendengarmu. Dalam paket nio (I / O Baru), kelas serupa sekarang bernama Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
menit
6

Pada dasarnya file akses acak membungkus aliran input dan output untuk mengelola akses acak. Anda tidak membuka dan menutup file, Anda membuka dan menutup aliran ke file.

Bintik
sumber
1
Iya. Saya tidak pernah melihat banyak tentang java.io.RandomAccessFile. Saya selalu berasumsi itu mengesampingkan java.io.File tetapi tidak !. File mewakili jalur. RandomAccessFile adalah objek yang dapat melakukan I / O disk sebagaimana streaming dapat melakukannya, meskipun dengan implementasi yang jauh berbeda, untuk memungkinkan akses acak daripada akses streaming.
Steve Cohen
6

BufferedReader dapat dibuka dan ditutup tetapi File tidak pernah dibuka, ini hanya mewakili jalur dalam sistem file.

Saher Ahwal
sumber
4

Misalkan, Anda punya

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

Anda tidak perlu menutup File s, karena ini hanya representasi dari sebuah jalur.

Anda harus selalu mempertimbangkan untuk menutup hanya pembaca / penulis dan aliran fakta.

Balaji Boggaram Ramanarayan
sumber