java I/O中的NoTouchElement异常

java I/O中的NoTouchElement异常,java,exception,io,java.util.scanner,Java,Exception,Io,Java.util.scanner,我有一个方法,应该从一个txt文件中读取,然后在交互窗格中打印出读取的信息。该方法有效,我得到了文件中的所有数据,但最后我还打印了java.util.NoSuchElementException。我知道这意味着扫描仪已经到达了文件的末尾,没有更多的数据可读取,但不知道如何解决问题。有人能帮我吗 public void parseRecord(String recordFileName){ File recordFile = null; Fruit fruit = null; String co

我有一个方法,应该从一个txt文件中读取,然后在交互窗格中打印出读取的信息。该方法有效,我得到了文件中的所有数据,但最后我还打印了java.util.NoSuchElementException。我知道这意味着扫描仪已经到达了文件的末尾,没有更多的数据可读取,但不知道如何解决问题。有人能帮我吗

public void parseRecord(String recordFileName){

File recordFile = null;
Fruit fruit = null;
String color = null, name = null;
Scanner sc = null;
PrintWriter output = null;      

try{    
  recordFile = new File(recordFileName);
  sc = new Scanner(recordFile);
  sc.useDelimiter("- *");

  while(sc.hasNext()){
    color = sc.next();
    name = sc.next();

    fruit = new Fruit(color, name);
    System.out.println(fruit);
  }
  sc.close();
}catch(Exception e){
  System.out.println(e);
}  
}



我想问题可能出在我创建的txt文件上。我使用-作为分隔符,在文件的最后一行我不应该放-,意思是 橙色-橙色- 青苹果


当我执行此操作时,不再出现错误

您遇到的一个问题是,您没有在每次使用
next
时检查
hasNext

while(sc.hasNext()) {
    String color = sc.next();
    if(sc.hasNext()) {
        String name = sc.next();
        Fruit fruit = new Fruit(color, name);
        System.out.println(fruit);
    }
}

您遇到的一个问题是每次使用
next
时都没有检查
hasNext

while(sc.hasNext()) {
    String color = sc.next();
    if(sc.hasNext()) {
        String name = sc.next();
        Fruit fruit = new Fruit(color, name);
        System.out.println(fruit);
    }
}

哪一行抛出异常?你能发布堆栈跟踪吗?当我捕获异常时,它只是打印出来,没有给出行,如:java.util。NoSuchElementException@user1181847而不是执行
System.out.println(e)
,do
e.printStackTrace()。您可以发布代码的行号吗?哪一行引发异常?你能发布堆栈跟踪吗?当我捕获异常时,它只是打印出来,没有给出行,如:java.util。NoSuchElementException@user1181847而不是执行
System.out.println(e)
,do
e.printStackTrace()。您可以为代码张贴行号吗?内部
while
不应该是
if
?内部
while
不应该是
if