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!


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.)


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.


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.


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.