¿Por qué java.io.File no tiene un método close ()?

123

Si bien java.io.RandomAccessFiletiene un close()método, java.io.Fileno lo tiene. ¿Porqué es eso? ¿El archivo se cierra automáticamente al finalizar o algo así?

¡Gracias!

Albus Dumbledore
fuente
3
Si observa la API de Java, podrá obtener la respuesta de inmediato.
gigadot
43
He aprendido que las personas son más útiles que la excelente especificación de Java.
Albus Dumbledore
6
b / c no se puede abrir :)
bestsss
6
Porque no abre nada. Y la gente es considerablemente menos confiable que la especificación oficial de Java.
Marqués de Lorne

Respuestas:

141

El javadoc de la Fileclase describe la clase como:

Una representación abstracta de nombres de rutas de archivos y directorios.

Filees solo una representación de un nombre de ruta, con algunos métodos relacionados con el sistema de archivos (como exists()) y el manejo de directorios, pero la entrada y salida de transmisión real se realiza en otro lugar. Las secuencias se pueden abrir y cerrar, los archivos no.

(Mi opinión personal es que es bastante desafortunado que Sun luego creara RandomAccessFile, causando mucha confusión con su nombre inconsistente).

biziclop
fuente
72

java.io.Fileno representa un archivo abierto , representa una ruta en el sistema de archivos. Por lo tanto, tener un closemétodo no tiene sentido.

En realidad, los autores de la biblioteca nombraron erróneamente esta clase, debería llamarse algo así como Path.

axtavt
fuente
Pero, ¿qué pasa con todos los métodos de listado de directorios? Deberían haberse separado del Pathcompleto.
biziclop
3
De acuerdo, pero en cualquier caso, File o RandomAccessFile tienen un nombre incorrecto. Algo como RandomAccessFileStream podría ser mejor, pero ya es demasiado tarde para muchos años.
maaartinus
7
"En realidad, esta clase fue mal nombrada por los autores de la biblioteca, debería llamarse algo así como Path" -> Te escucharon. En el paquete nio (New I / O), la clase similar ahora se llama Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
minutos
6

Esencialmente, el archivo de acceso aleatorio envuelve los flujos de entrada y salida para administrar el acceso aleatorio. No abre y cierra un archivo, abre y cierra las secuencias de un archivo.

Partícula
fuente
1
Si. Nunca miré mucho en java.io.RandomAccessFile. Siempre asumí que anulaba java.io.File pero no es así. El archivo representa una ruta. RandomAccessFile es un objeto que puede realizar E / S de disco como lo hacen los flujos, aunque con una implementación muy diferente, para permitir un acceso aleatorio en lugar de un flujo continuo.
Steve Cohen
6

Un BufferedReader puede abrirse y cerrarse, pero un archivo nunca se abre, solo representa una ruta en el sistema de archivos.

Saher Ahwal
fuente
4

Supongamos que tienes

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

No es necesario cerrar la Files, porque es solo la representación de una ruta.

Siempre debe considerar cerrar solo los lectores / escritores y, de hecho, los flujos.

Balaji Boggaram Ramanarayan
fuente