¿Cuál es la mejor manera de leer un archivo de texto de dos líneas a la vez en Java?

StackOverflow https://stackoverflow.com/questions/455695

  •  19-08-2019
  •  | 
  •  

Pregunta

BufferedReader in;

String line;
while ((line = in.readLine() != null) {
    processor.doStuffWith(line);
}

Así es como procesaría un archivo línea por línea. En este caso, sin embargo, quiero enviar dos líneas de texto al procesador en cada iteración. (El archivo de texto que estoy procesando esencialmente almacena un registro en dos líneas, por lo que envío un solo registro al procesador cada vez).

¿Cuál es la mejor manera de hacer esto en Java?

¿Fue útil?

Solución

¿Por qué no solo leer dos líneas?

BufferedReader in;
String line;
while ((line = in.readLine() != null) {
    processor.doStuffWith(line, in.readLine());
}

Esto supone que puede confiar en tener conjuntos completos de datos de 2 líneas en su archivo de entrada.

Otros consejos

BufferedReader in;
String line1, line2;

while((line1 = in.readLine()) != null 
   && (line2 = in.readLine()) != null))
{
    processor.doStuffWith(line1, line2);
}

O podrías concatenarlos si quisieras.

Refactorizaría el código para que se vea así:

RecordReader recordReader;
Processor processor;

public void processRecords() {
    Record record;

    while ((record = recordReader.readRecord()) != null) {
        processor.processRecord(record);
    }
}

Por supuesto, en ese caso tiene que inyectar de alguna manera el lector de registros correcto en esta clase, pero eso no debería ser un problema.

Una implementación de RecordReader podría tener este aspecto:

class BufferedRecordReader implements RecordReader
{
    BufferedReader in = null;

    BufferedRecordReader(BufferedReader in)
    {
        this.in = in;
    }
    public Record readRecord()
    {
        String line = in.readLine();

        if (line == null) {
            return null;
        }

        Record r = new Record(line, in.readLine());

        return r;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top