texto - leer y escribir datos en java
¿Debo cerrar() tanto FileReader como BufferedReader? (6)
Como han señalado otros, solo necesitas cerrar el envoltorio externo.
BufferedReader reader = new BufferedReader(new FileReader(fileName));
Hay una posibilidad muy pequeña de que esto pueda filtrar un identificador de archivo si el constructor BufferedReader
lanzó una excepción (por ejemplo, OutOfMemoryError
). Si su aplicación está en este estado, cuán cuidadoso debe ser su limpieza podría depender de cuán importante es que no prive al sistema operativo de los recursos que podría asignar a otros programas.
La interfaz de Closeable se puede usar si es probable que un constructor de envoltura falle en Java 5 o 6:
Reader reader = new FileReader(fileName);
Closeable resource = reader;
try {
BufferedReader buffered = new BufferedReader(reader);
resource = buffered;
// TODO: input
} finally {
resource.close();
}
El código de Java 7 debe usar el patrón try-with-resources :
try (Reader reader = new FileReader(fileName);
BufferedReader buffered = new BufferedReader(reader)) {
// TODO: input
}
Estoy leyendo un archivo local usando un BufferedReader envuelto alrededor de un FileReader:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
// read the file
// (error handling snipped)
reader.close();
¿Debo close()
el FileReader
también, o lo manejará el contenedor? He visto código donde la gente hace algo como esto:
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
// read the file
// (error handling snipped)
bReader.close();
fReader.close();
Se llama a este método desde un servlet, y me gustaría asegurarme de no dejar ningún controlador abierto.
De acuerdo con la fuente BufferedReader, en este caso bReader.close llama a fReader.close, por lo que técnicamente no tienes que llamar a este último.
Después de verificar el código fuente, encontré eso para el ejemplo:
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
el método close () en el objeto BufferedReader llamaría al método abstract close () de la clase Reader que llamaría finalmente al método implementado en la clase InputStreamReader , que luego cerraría el objeto InputStream .
Entonces, solo bReader.close () es suficiente.
El código fuente de docjar.com/html/api/java/io/BufferedReader.java.html muestra que el subyacente está cerrado cuando cierra el BufferedReader.
Solo necesita cerrar el bufferReader ie reader.close () y funcionará bien.
no.
BufferedReader.close()
cierra la secuencia según javadoc para BufferedReader y InputStreamReader
tanto como
FileReader.close()
hace.