3
BufferedReader in;

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

这就是我逐行处理文件的方式。然而,在这种情况下,我想在每次迭代中向处理器发送行文本。(我正在处理的文本文件基本上将一条记录存储在两行中,因此我每次都向处理器发送一条记录。)

在 Java 中执行此操作的最佳方法是什么?

4

3 回答 3

12

为什么不只读两行?

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

这假设您可以依赖输入文件中包含完整的 2 行数据集。

于 2009-01-18T18:56:59.217 回答
10
BufferedReader in;
String line1, line2;

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

或者,如果您愿意,可以将它们连接起来。

于 2009-01-18T19:04:43.663 回答
0

我会重构代码看起来像这样:

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;
    }
}
于 2009-01-18T22:11:17.840 回答