2009-01-18 6 views
3
BufferedReader in; 

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

Voici comment je traiterais un fichier ligne par ligne. Dans ce cas, cependant, je veux envoyer deux lignes de texte au processeur à chaque itération. (Le fichier texte que je suis en train de traiter stocke un enregistrement sur deux lignes, donc j'envoie un seul enregistrement au processeur à chaque fois.)Quelle est la meilleure façon de lire un fichier texte deux lignes à la fois en Java?

Quelle est la meilleure façon de faire cela en Java?

Répondre

12

Pourquoi ne pas simplement lire deux lignes? Cela suppose que vous pouvez compter sur des ensembles complets de données à 2 lignes dans votre fichier d'entrée.

10
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.

0

Je Refactor code pour regarder un peu comme 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 injecter en quelque sorte lecteur d'enregistrement correct pour cette classe, mais cela ne devrait pas être un problème.

Une mise en œuvre du 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; 
    } 
} 
+0

Merci, janvier Mon code ressemble déjà à ceci: j'essayais de trouver la meilleure façon d'écrire l'équivalent de votre implémentation "BufferedRecordReader". – Ross

Questions connexes