使用BufferedReader读取CSV文件,导致读取备用行

时间:2012-08-16 15:07:28

标签: java csv

我正在尝试从我的java代码中读取 csv 文件。使用以下代码:

public void readFile() throws IOException {
    BufferedReader br = new BufferedReader(new FileReader(fileName));
    lines = new ArrayList<String>();
    String newLine;
    while ((newLine = br.readLine()) != null) {
        newLine = br.readLine();
        System.out.println(newLine);
        lines.add(newLine);
    }
    br.close();
}

我从上面的代码得到的输出是readLine()方法读取并返回的每个替代行[第2,第4,第6行]。我不确定为什么会出现这种行为。如果我在阅读csv文件时遗漏了某些内容,请纠正我。

3 个答案:

答案 0 :(得分:6)

你第一次在while循环中没有处理它时读取该行,那么你再次读它,但这次你正在处理它。 readLine()方法读取一行并将reader-pointer替换为文件中的下一行。因此,每次使用此方法时,指针都会增加1指向下一行。

此:

 while ((newLine = br.readLine()) != null) {
        newLine = br.readLine();
        System.out.println(newLine);
        lines.add(newLine);
    }

应改为:

 while ((newLine = br.readLine()) != null) {
        System.out.println(newLine);
        lines.add(newLine);
    }

因此,读取一条线并对其进行处理,而不读取另一条线然后进行处理。

答案 1 :(得分:1)

您需要删除循环体中的第一行 newLine = br.readLine();

答案 2 :(得分:0)

在Java 8中,我们可以轻松实现它

type NoHref<T> = Omit<T, 'href'>;

function test<T>(t: T): NoHref<T> {
  return t;
}

export const TEST_CONST = test({} as HTMLAnchorElement);

外部列表将具有行,内部列表将具有对应的列值