2013-02-11 81 views
2

我正在做一个类来读取文件中的对象,这是早期保存到文件(.txt格式),但我收到试图加载文件时出现以下错误:扫描仪问题:NoSuchElementException异常

的java .util.NoSuchElementException

该方法是这样制作的,因此用户应该能够输入文件的名称。即使它已经尝试调试升技,也只是用已经给出的名称(而不是输入)引用文件本身。这是该方法的样子:

public void load(String filename) throws FileNotFoundException 
{ 
    final String FIELD_STOP = ":"; 
    String loadFile; 
    loadFile = filename +".txt"; 

    FileReader ansfil = new FileReader(loadFile); 
    Scanner fileIn = new Scanner(ansfil); 
    fileIn.useLocale(new Locale("en")); 

    System.out.println(loadFile); 
    fileIn.useDelimiter(FIELD_STOP); 
    int size; 

    try 
    { 
     while(fileIn.hasNext()) 
     { 
      size = fileIn.nextInt(); 
      archive = new CDarkivImplemented(size); 
      CD readIn = new CDImplemented(); 

      for(int i = 0; i < size ; i++) 
      { 
       readIn = new CDImplemented(); 
       readIn.title = fileIn.next(); 
       readIn.artist = fileIn.next(); 
       readIn.genre = CD.interpretGenre(fileIn.next()); 
       readIn.publisher = fileIn.next(); 
       readIn.year = fileIn.nextInt(); 
       readIn.ID = fileIn.nextInt(); 
       archive.addCD(readIn); 
      } 

     } 

    } 

    catch(Exception e) 
    { 
     System.out.println("Wrong! : " + e); 
     System.exit(1); 
    } 
    fileIn.close(); 
} 
+0

什么行给错误? – 2013-02-11 19:27:00

+0

你确定你的文件中有冒号分隔的整数吗?可能有一些其他字符串,而不是整数..检查您的文件内容。 – 2013-02-11 19:32:23

+0

该文件只包含以下内容: 50: test:test:pop:test:2012:3301: 第一个值是存档的总大小。然后第一个值等于字符串,第二个是艺术家,第三个是流派,第四个是发布者,那么它是年份,并且是从我之前创建对象时生成的Id函数。这只是对方法加载和保存的快速测试。 – 2013-02-11 19:36:53

回答

0

什么是while循环for?正如我从您对文件格式的评论中推断的,您可能不需要这样做,并且可能会导致错误,因为它在读取最后一个元素之后再循环一次。

+0

修好了:) – 2013-02-11 20:08:21

2

嫌疑这就是问题所在:

for(int i = 0; i <= size ; i++) 

也就是说循环将执行size + 1倍,这可能不是你的意思。尝试:

for (int i = 0; i < size; i++) 

,看看有没有什么帮助...

(顺便说一句,我会宣布readIn变量循环 - 没有必要到外面有它我会。也使用finally块来关闭文件。)

+0

恐怕它没有成功。我之前也想到了这一点,但它仍然给我同样的例外。 – 2013-02-11 19:24:40

+0

@ Ole-MortenHeggertveit:那么你的文件只包含没有它声称的那么多的数据。我们可以做很多事情来帮助你 - 你应该调试并检查它。 – 2013-02-11 19:33:48

0
public void load(String filename) throws FileNotFoundException { 
    final String FIELD_STOP = ":"; 
    final String loadFile = filename +".txt"; 
    try(FileReader ansfil = new FileReader(loadFile)) { 
     Scanner fileIn = new Scanner(ansfil); 
     fileIn.useLocale(new Locale("en")); 
     System.out.println(loadFile); 
     fileIn.useDelimiter(FIELD_STOP); 
     int size; 
     while(fileIn.hasNext()) { 
     size = fileIn.nextInt(); 
     archive = new CDarkivImplemented(size); 
     for(int i = 0; fileIn.hasNext() && i < size; i++) { 
      String title = fileIn.next(); 
      if(! fileIn.hasNext()) break; 
      String artist = fileIn.next(); 
      if(! fileIn.hasNext()) break; 
      String genre = fileIn.next(); 
      if(! fileIn.hasNext()) break; 
      String publisher = fileIn.next(); 
      if(! fileIn.hasNext()) break; 
      int year = fileIn.nextInt(); 
      if(! fileIn.hasNext()) break; 
      int ID = fileIn.nextInt(); 
      archive.addCD(
       new CDImplemented(
        title, artist, genre, publisher, year, ID)); 
     } 
     } 
    } 
    catch(Exception e) 
    { 
     System.out.println("Wrong! : " + e); 
     System.exit(1); 
    } 
}