在java中读取文本文件 – 为什么跳过行?

我是新来的,只是努力尝试获取文本文件。 在每一行上都有一个单词和相应的数字代码。 我们的想法是阅读它并将代码和单词放在单独的变量中。 我对这个领域了解不多,但我一直在网上四处寻找并提出以下建议:

try{ FileReader freader=new FileReader(f); BufferedReader inFile=new BufferedReader(freader); while (inFile.readLine()!=null){ String s=null; s=inFile.readLine(); System.out.println(s); String[] tokens=s.split(" "); string=tokens[0]; System.out.println(string); code=tokens[1]; System.out.println(code); c.insert(string, code); }//end outer while }//end try 

问题是未读取文本文件的第一行。 然后它每次都跳过一条线! (换句话说,只读取第1行,第3行,第5行,第7行等)

正如我上面所说,我是新手,我不太了解我在网上不同网站上看到的所有不同的东西(比如为什么一切都是bufferedThis或bufferedThat,或者如何正确使用所有的tokenizer东西)。 我在不同的时间尝试了一些不同的东西,最后得到了这个。

你的while循环吞噬了文件中的一半行。

 while (inFile.readLine()!=null) 

这会读取一行,但不会将其分配给任何内容。 在循环之前声明一个String并以这种方式读取每一行。

 String line; while ((line = inFile.readLine()) != null) 

现在变量line在循环内可用,因此您不需要在循环中调用inFile.readLine()

你的问题是你正在阅读每一行两次。 一个在while块内,一个在while的条件下。

试试这个:

 try{ FileReader freader=new FileReader(f); BufferedReader inFile=new BufferedReader(freader); String s; while ((s=inFile.readLine())!=null){ System.out.println(s); String[] tokens=s.split(" "); string=tokens[0]; System.out.println(string); code=tokens[1]; System.out.println(code); c.insert(string, code); }//end outer while }//end try