Domanda

BufferedReader in;

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

Ecco come elaborare un file riga per riga. In questo caso, tuttavia, voglio inviare due righe di testo al processore in ogni iterazione. (Il file di testo che sto elaborando essenzialmente memorizza un record su due righe, quindi ogni volta invio un singolo record al processore.

Qual è il modo migliore per farlo in Java?

È stato utile?

Soluzione

Perché non leggere solo due righe?

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

Ciò presuppone che si possa fare affidamento su set di dati completi a 2 righe nel file di input.

Altri suggerimenti

BufferedReader in;
String line1, line2;

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

O puoi concatenarli se lo desideri.

Riformulerei il codice in modo che assomigli in qualche modo a questo:

RecordReader recordReader;
Processor processor;

public void processRecords() {
    Record record;

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

Ovviamente in quel caso devi in ??qualche modo inserire il lettore di record corretto in questa classe, ma questo non dovrebbe essere un problema.

Un'implementazione di RecordReader potrebbe apparire così:

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top