Pourquoi java.io.File n'a-t-il pas de méthode close ()?

123

Bien qu'il java.io.RandomAccessFilen'y ait pas de close()méthode java.io.File. Pourquoi donc? Le dossier est-il automatiquement fermé lors de la finalisation ou quelque chose?

Merci!

Albus Dumbledore
la source
3
Si vous regardez dans l'API Java, vous pourrez obtenir la réponse immédiatement.
gigadot
43
J'ai appris que les gens sont plus utiles que la superbe spécification Java.
Albus Dumbledore
6
b / c il ne peut pas être ouvert :)
bestsss
6
Parce que ça n'ouvre rien. Et les gens sont considérablement moins fiables que la spécification officielle Java.
Marquis of Lorne

Réponses:

141

Le javadoc de la Fileclasse décrit la classe comme:

Une représentation abstraite des chemins de fichiers et de répertoires.

Fileest seulement une représentation d'un chemin, avec quelques méthodes concernant le système de fichiers (comme exists()) et la gestion des répertoires, mais les entrées et sorties de flux réelles se font ailleurs. Les flux peuvent être ouverts et fermés, les fichiers ne le peuvent pas.

(Mon opinion personnelle est qu'il est plutôt malheureux que Sun ait ensuite créé RandomAccessFile, causant beaucoup de confusion avec sa dénomination incohérente.)

biziclop
la source
72

java.io.Filene représente pas un fichier ouvert , il représente un chemin dans le système de fichiers. Par conséquent, avoirclose méthode n'a pas de sens.

En fait, cette classe a été mal nommée par les auteurs de la bibliothèque, elle devrait être appelée quelque chose comme Path.

axtavt
la source
Mais qu'en est-il de toutes les méthodes de liste de répertoires? Ils auraient dû être séparés du Pathcomplètement.
biziclop
3
D'accord, mais dans tous les cas, File ou RandomAccessFile est mal nommé. Quelque chose comme RandomAccessFileStream pourrait être mieux, mais il est maintenant trop tard depuis plusieurs années.
maaartinus
7
"En fait, cette classe a été mal nommée par les auteurs de la bibliothèque, elle devrait être appelée quelque chose comme Path" -> Ils vous ont entendu. Dans le package nio (New I / O), la classe similaire est désormais nommée Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
minutes
6

Essentiellement, le fichier à accès aléatoire encapsule les flux d'entrée et de sortie afin de gérer l'accès aléatoire. Vous n'ouvrez et ne fermez pas un fichier, vous ouvrez et fermez les flux d'un fichier.

Grain
la source
1
Oui. Je n'ai jamais beaucoup cherché dans java.io.RandomAccessFile. J'ai toujours supposé qu'il remplaçait java.io.File mais ce n'est pas le cas !. Le fichier représente un chemin. RandomAccessFile est un objet qui peut effectuer des E / S de disque comme les flux peuvent, bien qu'avec une implémentation très différente, permettre un accès aléatoire plutôt que par flux.
Steve Cohen
6

Un BufferedReader peut être ouvert et fermé mais un fichier n'est jamais ouvert, il représente simplement un chemin dans le système de fichiers.

Saher Ahwal
la source
4

Dis suppose que tu as

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

Vous n'avez pas besoin de fermer le Files, car ce n'est que la représentation d'un chemin.

Vous devriez toujours envisager de fermer uniquement les lecteurs / écrivains et en fait les flux.

Balaji Boggaram Ramanarayan
la source