2017-02-23 50 views
1

Я создаю консольное приложение на основе меню с использованием Java. У меня есть класс, который позволяет пользователю регистрироваться, вводя их информацию. Эта информация записывается в файл, который добавляется каждый раз, когда вводится новый пользователь.Чтение из текстового файла и сопоставление ввода пользователя с определенными столбцами поля в текстовом файле. Столбцы разделены

Я хотел бы иметь функцию входа в систему, но мне трудно понять, как читать файл и соответствовать только пользовательскому вводу в первые два столбца ID;Password.

Как только они соответствуют пользовательскому вводу, я смогу продолжить переход к следующему меню. Мой текстовый файл выглядит следующим образом:

ID;Password;FirstName;LastName;Email 
admin;1234;adminFirst;adminLast;[email protected] 

Вот мой класс Войти, как хорошо. Я создал массив для ввода данных пользователя, только в случае, если это было бы полезно:

public class Log_In extends Main_Menu { 

    public void logging_in(){ 

     Scanner in = new Scanner(System.in); 
     System.out.println("Please enter your login information!"); 

     String [] log_in_array = new String[2]; 

     String ID, password; 

     System.out.print("ID: "); 
     ID = in.next(); 

     System.out.print("Password: "); 
     password = in.next(); 

     //Stores the ID and PASSWORD to the array. Now we will compare the array to the txt file to find a match 
     //Must match FIELD_ONE;FIELD_TWO 
     log_in_array [0] = ID; 
     log_in_array [1] = password; 


     in.close(); 

    } 
} 

ответ

0

вы можете напишите вспомогательный метод, чтобы прочитать ваш текстовый файл и сравнить идентификатор и пароль, предоставленные пользователем, например, следующие.

// The name of the file to open. 
static String fileName = "myTextFliel.txt"; 

public static boolean myHelper(String id, String password) { 
    // This will reference one line at a time 
    String line = null; 
    boolean retVal= false; 
    try { 
     // FileReader reads text files in the default encoding. 
     FileReader fileReader = 
      new FileReader(fileName); 

     // Always wrap FileReader in BufferedReader. 
     BufferedReader bufferedReader = 
      new BufferedReader(fileReader); 

     while((line = bufferedReader.readLine()) != null) { 
      //create a token based on 
      String [] token=line.split(";"); 
      // because you know first and second word of each line in 
      // given file is id and password 
      if (token[0].equals(id) && token[1].equals(password)){ 
       retVal=true; 
       return retVal; 
      } 
     } 

     // Always close files. 
     bufferedReader.close();   
    } 
    catch(FileNotFoundException ex) { 
     System.out.println(
      "Unable to open file '" + 
      fileName + "'");     
    } 
    catch(IOException ex) { 
     System.out.println(
      "Error reading file '" 
      + fileName + "'");     
     // Or we could just do this: 
     // ex.printStackTrace(); 
    } 
    return retVal; 
} 


public void logging_in(){ 

    Scanner in = new Scanner(System.in); 
    System.out.println("Please enter your login information!"); 

    String [] log_in_array = new String[2]; 

    String ID, password; 

    System.out.print("ID: "); 
    ID = in.next(); 

    System.out.print("Password: "); 
    password = in.next(); 

    //Stores the ID and PASSWORD to the array. Now we will compare the array to the txt file to find a match 
    //Must match FIELD_ONE;FIELD_TWO 
    log_in_array [0] = ID; 
    log_in_array [1] = password; 


    // Here you can call your helper method. 
    boolean foundMe =myHelper(log_in_array [0],log_in_array [1]) 
    if (foundMe==true){ 
    //do whatever u want to do 
    } 

    in.close(); 

} 

С небольшим количеством работы вы можете игнорировать строку заголовка.

+0

Спасибо за ответ, я воспользуюсь этим утром. Это довольно поздно, и я работаю утром. –

+0

Нет проблем. Если вам нравится этот ответ, вы можете проголосовать и принять ответ, если вы выглядели примерно так –

+0

Это сработало! Однако была небольшая ошибка. Мне просто пришлось изменить маркерный массив на 'if (token [0] .equals (id) && token [1] .equals (password)) {' потому что это было технически только чтение первого слова. Надеюсь, он по-прежнему работает, когда я добавляю больше информации в txt-файл. Цените помощь! –

0

Если структура файла что-то вроде этого

username pass data data 
username pass data data 
username pass data data... and so on 

вы можете прочитать файл в ArrayList, но пропустить все, что не имя пользователя или передать, как так

ArrayList<String> userinfo = new ArrayList(); 
while (input.hasNext()){ //input is a Scanner object that is your file 
    userinfo.add(input.next());//username 
    userinfo.add(input.next());//pass 
    input.next();//skip 
    input.next();//skip 
} 

каждое имя пользователя и пароль будут парами, как это в пределах

ArrayList 
(username, pass, username, pass, username, pass,...) 

Тогда, чтобы увидеть, если имя пользователя и пароль совпадает

int index = userinfo.indexOf(ID); 
if (userinfo.get(index+1).equals(password))//the password comes right after the username in the list 
    return true; 

Я предполагаю, что это для практики, вы, как правило, используют базу данных какой-то для имени пользователя и пароля

+0

Да, я новичок, так что это практика. Я понял ваше предложение, и я добавил его в свою программу. Я получаю ошибку о том, что: 'Exception в потоке "основного" java.util.NoSuchElementException' Он имеет что-то делать с:' userinfo.add (input.next()); // pass' Спасибо за помощь кстати! –