2015-04-25 2 views
0

Итак, я пытаюсь прочитать первые 4 переменных из каждой строки в текстовом файле.NoSuchElementException из чтения из файла

Но он ловит NoSuchElementException.

public static void readRecords() 
    { 
     System.out.printf("%s%s%s%s" , "Team Id", "TeamNAme","CoachFirst", "CoachLast"); 
     try 
     { 
      while (input.hasNext()) 
      { 
       System.out.printf("%s%s%s%s",input.nextInt(),input.next(),input.next(),input.next()); 

      } 

     } 
     catch (NoSuchElementException statException) 
     { 
      System.err.println("File improperly formed."); 
     } 
     catch (IllegalStateException stateException) 
     { 
      System.err.println("ERROR READING FROM FILE"); 
     } 
    } 

Любые идеи о том, почему это происходит?

Это элементы текста файла:

TeamNumber,Team Name,Coach First,Coach Last,Mentor First,Mentor Last,Team Fin Sponsor,Schools or Sponsoring Organization,TmMem1First,TmMem1Last,TmMem2First,TmMem2Last,TmMem3First,TmMem3Last,TmMem4First,TmMem4Last,TmMem5First,TmMem5Last,TmMem6First,TmMem6Last,TmMem7First,TmMem7Last,TmMem8First,TmMem8Last 
6842,Reagan Ray-Guns,Judy,Mallon,Aziz,Valdez,Texas Workforce Commission,REAGAN H S,Steven,Cepeda,Alan,Yue,Tim,Callaway,Damon,Bertucci,Samuel,de Olvieira,Samuel,Day,,,, 
6888,Islanders,Judy,Maldonado,Brady,Trevino,Three Rivers Robotics,THREE RIVERS MIDDLE,Shireen,Cowdrey,Dee,Roundtree,Steven,Callaway,Francisco,Bermea,,,,,,,, 
7004,GREENHILL Tops,Kanat,LaBass,Harvey,Pflueger,GREENHILL Boosters,GREENHILL SCHOOL,Harvey,Pflueger,Sandra,Day,Denny,Rodriguez,shirley,Couvillon,Carly,Szarka,,,,,, 
+0

Вы можете отправить мне образец продукции, ожидающий? –

+0

Переместите попытку catch внутри цикла while, и вы должны быть хорошими. Кроме того, вы можете пропустить первую строку ввода, поскольку она представляет заголовки. – CKing

+0

Как инициализируется 'input'? Почему вы используете 'nextInt()' для всех четырех полей? – pathfinderelite

ответ

0

Ну, вы читаете 4 переменных, но каждая строка в вашем текстовом файле содержит более 4 записей (при условии, что вы используете , в качестве разделителя сканера). Это означает, что вам нужно позвонить Scanner#nextLine(), чтобы пропустить остальную часть ввода на линии.

public static void readRecords() 
{ 
    System.out.printf("%s%s%s%s" , "Team Id", "TeamNAme","CoachFirst", "CoachLast"); 
    try 
    { 
     while (input.hasNext()) 
     { 
      System.out.printf("%s%s%s%s",input.nextInt(),input.next(),input.next(),input.next()); 
      input.nextLine(); // skip remainder of line 
     } 

    } 
    catch (NoSuchElementException statException) 
    { 
     System.err.println("File improperly formed."); 
    } 
    catch (IllegalStateException stateException) 
    { 
     System.err.println("ERROR READING FROM FILE"); 
    } 
} 
1

У вас есть один чек на следующий элемент метода (hasNext()), но затем, вызвать nextInt() четыре раза.

Вы должны проверить, есть ли больше ints, каждый раз при вызове nextInt(). Также используйте вместо этого hasNextInt().

+0

Это не нужно, если он может быть уверен, что каждая запись имеет ровно четыре поля, но это, безусловно, безопаснее. – pathfinderelite

0

Первая строка вашего ввода фактически не начинается с int, поэтому вызов nextInt() на нем не удастся. Предположительно, вы хотите пропустить эту строку сначала, прежде чем читать фактические данные.

+0

Да, это была опечатка, я ее отредактировал @MarcFraioli – DkgMarine

Смежные вопросы