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?
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.)
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.
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.
Jawaban:
Javadoc
File
kelas mendeskripsikan kelas sebagai:File
hanyalah representasi dari nama path, dengan beberapa metode yang berhubungan dengan filesystem (sepertiexists()
) 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.)sumber
java.io.File
tidak mewakili file yang terbuka , ini mewakili jalur di sistem file. Oleh karena itu, memilikiclose
metode di atasnya tidak masuk akal.Sebenarnya, kelas ini salah dinamai oleh penulis perpustakaan, seharusnya disebut seperti
Path
.sumber
Path
sepenuhnya.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.
sumber
BufferedReader dapat dibuka dan ditutup tetapi File tidak pernah dibuka, ini hanya mewakili jalur dalam sistem file.
sumber
Misalkan, Anda punya
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.
sumber