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?
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.)
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.
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.
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.
Réponses:
Le javadoc de la
File
classe décrit la classe comme:File
est seulement une représentation d'un chemin, avec quelques méthodes concernant le système de fichiers (commeexists()
) 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.)la source
java.io.File
ne 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
.la source
Path
complètement.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.
la source
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.
la source
Dis suppose que tu as
Vous n'avez pas besoin de fermer le
File
s, 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.
la source