BufferedReader in;
String line;
while ((line = in.readLine() != null) {
processor.doStuffWith(line);
}
Вот так я бы обработал файл построчно. Однако в этом случае я хочу отправлять два строк текста процессору на каждой итерации. (Текстовый файл, который я обрабатываю, по сути, хранит одну запись в двух строках, поэтому я каждый раз отправляю одну запись процессору.)
Как лучше всего это сделать на Java?




Почему бы просто не прочитать две строчки?
BufferedReader in;
String line;
while ((line = in.readLine() != null) {
processor.doStuffWith(line, in.readLine());
}
Это предполагает, что вы можете рассчитывать на наличие полных двухстрочных наборов данных во входном файле.
BufferedReader in;
String line1, line2;
while((line1 = in.readLine()) != null
&& (line2 = in.readLine()) != null))
{
processor.doStuffWith(line1, line2);
}
Или вы можете объединить их, если хотите.
Я бы реорганизовал код, чтобы он выглядел примерно так:
RecordReader recordReader;
Processor processor;
public void processRecords() {
Record record;
while ((record = recordReader.readRecord()) != null) {
processor.processRecord(record);
}
}
Конечно, в этом случае вам нужно каким-то образом внедрить в этот класс правильную программу чтения записей, но это не должно быть проблемой.
Одна реализация RecordReader может выглядеть так:
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;
}
}
Спасибо, ян. Мой код на самом деле уже выглядит так - я пытался понять, как лучше всего написать эквивалент вашей реализации BufferedRecordReader.