2014-12-11 2 views
0

Итак, мне нужно создать программу, которая вводит текстовый файл с именем пользователя и паролем. Я использую объекты Scanner и File для чтения из файла. Каждая строка user.txt содержит имя пользователя и пароль.NoSuchElementException для сканера файлов Java

users.txt

имя пользователя пароль

String fileName = "users.txt"; 
try{ 
      File inFile = new File(fileName); 
      Scanner fin = new Scanner(inFile); 
      while(fin.hasNextLine()){ 
      System.out.print(fin.next()); 
      } 
      fin.close(); 
    } 
    catch(Exception e){e.printStackTrace(); } 

Этот код будет выводить имя пользователя только штраф, но затем после текстового файла я получаю «NoSuchElementException». в результате улова. Почему? Данные обрабатываются отлично, так почему бы мне получить исключение такого элемента?

ответ

2

Если каждая строка имеет как имя пользователя и пароль, вероятно, вы должны сделать что-то вроде этого:

 while(fin.hasNextLine()){ 
      System.out.print(fin.next()); // username 
      System.out.print(fin.next()); // password 
      fin.nextLine(); // consume end of line 
     } 

или

 String line = null; 
     while((line = fin.nextLine()) != null){ 
      String[] tokens = line.split(" "); 
      if (tokens.length > 1) { 
       System.out.print(tokens[0]); // username 
       System.out.print(tokens[1]); // password 
      } 
     } 
+0

Хорошо, так что я был совершенно сбит с толку объяснение моего программирования профессора о как работают методы объекта Сканер. Я полностью забыл о методах toString. Так ли это работает? nextLine переходит к следующей строке, если она не запрашивает печать и печатает результат, если запрашивается печать? Спасибо, и по какой-то причине ваш другой раздел кода не работал. – user2398026

+0

@ user2398026 Какой из них не работает? Независимо от того, распечатываете ли вы результаты сканера, нет никакой разницы. Ваша проблема заключалась в том, что hasNextLine вернет true, даже если все, что доступно, это конец строки символа последней строки, и в этом случае fin.next() будет генерировать исключение. – Eran

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