Quel est le meilleur moyen de lire un fichier texte deux lignes à la fois en Java?
-
19-08-2019 - |
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?
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;
}
}