readLine在outfiling时跳过行

时间:2013-10-29 17:45:54

标签: java bufferedreader

这段代码似乎不起作用;我在csv文件中有10行,但只打印出5行..只打印出2,4,6,8,10行。

String text = CSVFile.readLine();
    while (text != null){
    //lines.add(infile.next());
    //outfile.println(lines);
    outfile.println(CSVFile.readLine());

    if (CSVFile.readLine()==null)
        break;
    }

我想我知道为什么它会跳过奇数,但我不知道如何修复它。 因为我告诉它readLine()两次,我相信它从第一个,然后是第三个,然后继续等。

7 个答案:

答案 0 :(得分:4)

因为你在while循环中调用readLine两次。试试这个:

String text = CSVFile.readLine();
    while (text != null){
    outfile.println(text);
    text = CSVFile.readLine();

    if (text==null)
        break;

读者是有状态的,并且记得上次调用方法时所读取的内容...

答案 1 :(得分:1)

每次调用the readLine() method都会消耗下一行输入。您在每次while循环迭代时调用它两次。

尝试修改循环,以便每个循环只调用readLine()一次。标准方式是:

String text;
while ((text = CSVFile.readLine()) != null)
{
    // Process the line here.
}

这会将该行分配到text并将其与null全部一行进行比较。

答案 2 :(得分:1)

简单。不要两次调用readLine。

String text = CSVFile.readLine();
while (text != null){
    outfile.println(text);

    text = CSVFile.readLine();
}

答案 3 :(得分:1)

你的猜测是正确的。实际上,if块已经完全过时了,因为您已经检查了while循环条件。试试这个:

String text = CSVFile.readLine();
while (text != null) {
    System.out.println(text);
    text = CSVFile.readLine();
}

答案 4 :(得分:1)

您正在跳过线路,因为您正在阅读两次。

String text = CSVFile.readLine(); <-- here
while (text != null){
    outfile.println(CSVFile.readLine()); <-- here

    if (CSVFile.readLine()==null) 
        break;
}

只需阅读一次。

String text = CSVFile.readLine();
while (text != null){
    outfile.println(text);
    text = CSVFile.readLine();
}

答案 5 :(得分:1)

因为当你调用readLine()时,它会将光标的位置提前一个。

String text = CSVFile.readLine(); <- line 1
while (text != null){
    outfile.println(CSVFile.readLine()); <- print line 2 
    if (CSVFile.readLine()==null) <- goes to line 3 so next time the println will print line 4 
       break;
}

为避免这样做:

String text = null;
while ((text = CSV.readLine()) != null){
  outfile.println(text); 
}

答案 6 :(得分:0)

在您的代码中会发生什么,在打印之前调用readLine()方法两次。试试以下,

String text = CSVFile.readLine();
while (text != null){
  outfile.println(text);
  text = CSVFile.readLine();
}