这段代码似乎不起作用;我在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()两次,我相信它从第一个,然后是第三个,然后继续等。
答案 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();
}