Buscar..


Introducción

Los lectores y escritores y sus respectivas subclases proporcionan I / O simple para datos basados ​​en texto / caracteres.

BufferedReader

Introducción

La clase BufferedReader es una envoltura para otras clases de Reader que cumple dos propósitos principales:

  1. Un BufferedReader proporciona almacenamiento en búfer para el Reader envuelto. Esto permite que una aplicación lea los caracteres uno a la vez sin sobrecargas de E / S indebidas.

  2. Un BufferedReader proporciona funcionalidad para leer texto por línea a la vez.

Conceptos básicos sobre el uso de un BufferedReader

El patrón normal para usar un BufferedReader es el siguiente. Primero, obtienes el Reader que deseas leer los caracteres. A continuación, crea una instancia de un BufferedReader que envuelve el Reader . Luego lees los datos de los personajes. Finalmente, cierra BufferedReader que cierra el `Reader envuelto. Por ejemplo:

File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
     BufferedReader br = new BufferedReader(fr)) {
    // Count the number of 'a' characters.
    int ch;
    while ((ch = br.read()) != -1) {
        if (ch == 'a') {
            aCount++;
        }
    }
    System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}

Puedes aplicar este patrón a cualquier Reader

Notas:

  1. Utilizamos Java 7 (o posterior) try-with-resources para garantizar que el lector subyacente esté siempre cerrado. Esto evita una posible fuga de recursos. En versiones anteriores de Java, cerraría explícitamente el BufferedReader en un bloque finally .

  2. El código dentro del bloque try es virtualmente idéntico al que FileReader si leemos directamente desde el FileReader . De hecho, un BufferedReader funciona exactamente igual que el Reader que envuelve. La diferencia es que esta versión es mucho más eficiente.

El tamaño del búfer BufferedReader

El método BufferedReader.readLine ()

Ejemplo: leer todas las líneas de un archivo en una lista

Esto se hace al obtener cada línea en un archivo y agregarla a una List<String> . Luego se devuelve la lista:

public List<String> getAllLines(String filename) throws IOException {
    List<String> lines = new ArrayList<String>();
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line = null;
        while ((line = reader.readLine) != null) {
            lines.add(line);
        }
    }
    return lines;
}

Java 8 proporciona una forma más concisa de hacerlo utilizando el método lines() :

public List<String> getAllLines(String filename) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        return br.lines().collect(Collectors.toList());
    }
    return Collections.empty();
}

Ejemplo de StringWriter

La clase StringWriter de Java es un flujo de caracteres que recopila los resultados del búfer de cadena, que se puede usar para construir una cadena.

La clase StringWriter extiende la clase Writer.

En la clase StringWriter, los recursos del sistema como los sockets de red y los archivos no se utilizan, por lo que no es necesario cerrar el StringWriter.

import java.io.*;  
public class StringWriterDemo {  
    public static void main(String[] args) throws IOException {  
        char[] ary = new char[1024];  
        StringWriter writer = new StringWriter();  
        FileInputStream input = null;  
        BufferedReader buffer = null;  
        input = new FileInputStream("c://stringwriter.txt");  
        buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));  
        int x;  
        while ((x = buffer.read(ary)) != -1) {  
                   writer.write(ary, 0, x);  
        }  
        System.out.println(writer.toString());        
        writer.close();  
        buffer.close();  
    }  
}

El ejemplo anterior nos ayuda a conocer un ejemplo simple de StringWriter que utiliza BufferedReader para leer datos de archivos de la secuencia.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow