Question

BufferedReader in;

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

Voici comment je traiterais un fichier ligne par ligne. Dans ce cas, toutefois, je souhaite envoyer deux lignes de texte au processeur à chaque itération. (Le fichier texte que je traite stocke essentiellement un enregistrement sur deux lignes, aussi j'envoie un seul enregistrement au processeur à chaque fois.)

Quel est le meilleur moyen de le faire en Java?

Était-ce utile?

La solution

Pourquoi ne pas simplement lire deux lignes?

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

Cela suppose que vous puissiez compter sur la présence de jeux de données complets de 2 lignes dans votre fichier d'entrée.

Autres conseils

BufferedReader in;
String line1, line2;

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

Ou vous pouvez les concaténer si vous le souhaitez.

Je refacturerais le code pour qu'il ressemble en quelque sorte à ceci:

RecordReader recordReader;
Processor processor;

public void processRecords() {
    Record record;

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

Bien sûr, dans ce cas, vous devez en quelque sorte injecter le bon lecteur de disques dans cette classe, mais cela ne devrait pas poser de problème.

Une implémentation de RecordReader pourrait ressembler à ceci:

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top