扫描器赢得';不要从文件中读取下一行。JAVA

扫描器赢得';不要从文件中读取下一行。JAVA,java,output,bufferedreader,Java,Output,Bufferedreader,正如标题所说,我可以让它在我想要的文件中写第一件事,但在那之后它就不再写了。我通过调试器运行它,发现它甚至没有读取下一行(我知道这一点,因为它没有填充数组)。我尝试在循环结束时用“line=in.readline;”手动推进指针(我不知道这是否实际上是一件可以做的事情),但它只是抛出了一个“NoTouchElement”异常。这是我的试块“ 一个更简单更干净的方法是 String line = in.readLine(); while (line != null) { Strin

正如标题所说,我可以让它在我想要的文件中写第一件事,但在那之后它就不再写了。我通过调试器运行它,发现它甚至没有读取下一行(我知道这一点,因为它没有填充数组)。我尝试在循环结束时用“line=in.readline;”手动推进指针(我不知道这是否实际上是一件可以做的事情),但它只是抛出了一个“NoTouchElement”异常。这是我的试块“


一个更简单更干净的方法是

 String line = in.readLine();

 while (line != null)
 {
    String arr [] = line.split ();
    if(arr.length == 3)
    {
            attendee3[0] = arr[0];
            attendee3[1] = arr[1];
            attendee3[2] = arr[2];
    }
   // other count code

   line = in.readLine();
 }

您必须将
line=in.readLine()
放在下面的一个块中,而不是放在扫描仪的while块中。

不仅如此,我有过这样的经验,扫描仪只能读取UTF-8编码的.txt文件。因此始终确保它们是UTF-8编码的。

如果他们不是简单地打开文件并用该编码保存它。

我认为问题在于您只读取一次文件中的字符串line=in.readLine();。我不认为while(line!=null)会因为这个原因而不能像您预期的那样工作。这就是我的想法,所以我添加了“line=in.readLine();“部分位于循环的末尾,这样它就可以在完成后再次读取。但它会引发该异常。这几乎就像它读取整个文件,并且没有任何内容可以读取一样,尽管我不知道这怎么可能……如果st.countTokens()不是3,也不是4,那么你只需要使用我添加的readLine循环Endlesslyen?这不是一行一行地推进它,最终结束循环吗?不管怎样,我确保我接下来的几个输入是3或4来测试这一点,它仍然只读取第一个:(您的中有一个错误;
st
变量在调用
line=in.readLine()时不会更新为新行)
。您应该将标记器的实例化向下移动到“Scanner”中,或者像Java1的回答中那样将其完全删除。我曾将.split方法弄乱过一段时间,但无法使其正常工作。我不认为这是我的问题,因为我让它读取并复制到数组中,然后写入文件。我的问题是将.split方法移动到e扫描器。很抱歉,我的
arr[0]
行有一个输入错误。复制和粘贴错误。如果你不打算接受我的建议并简化事情,那么至少放一些打印语句,这样你就知道发生了什么。我已经了解了拆分方法的工作原理。这非常简单。谢谢你的帮助。
 String line = in.readLine();

 while (line != null)
 {
    String arr [] = line.split ();
    if(arr.length == 3)
    {
            attendee3[0] = arr[0];
            attendee3[1] = arr[1];
            attendee3[2] = arr[2];
    }
   // other count code

   line = in.readLine();
 }