web-dev-qa-db-fra.com

Pourquoi Java.io.File n'a pas de méthode close ()?

Alors que Java.io.RandomAccessFile A une méthode close(), Java.io.File N'en a pas. Pourquoi donc? Le fichier est-il automatiquement fermé lors de la finalisation?

Merci!

108
Albus Dumbledore

Le javadoc de la classe File décrit la classe comme suit:

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

File n'est qu'une représentation d'un chemin d'accès, avec quelques méthodes concernant le système de fichiers (comme exists()) et la gestion des répertoires, mais la transmission en continu est effectivement effectuée ailleurs. Les flux peuvent être ouverts et fermés, les fichiers ne peuvent pas.

(Mon opinion personnelle est qu'il est plutôt malheureux que Sun ait ensuite créé RandomAccessFile, ce qui a causé beaucoup de confusion avec son nom incohérent.)

129
biziclop

Java.io.File ne représente pas un fichier ouvert, il représente un chemin dans le système de fichiers. Donc, avoir la méthode close n'a pas de sens.

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

63
axtavt

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

6
Speck

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.

4
Saher Ahwal

Dis suppose que tu as

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

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

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