txt texto que programa leer lee ficheros escribir desde datos con archivos archivo java io bufferedreader filereader

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.



Solo necesita cerrar el bufferReader ie reader.close () y funcionará bien.