Как искать в файле .txt строку и хэш-код?(Джава) - PullRequest
0 голосов
/ 17 марта 2019

Подсказка: я пишу программу для входа в систему, которая запрашивает у пользователя имя пользователя и пароль. Вся информация пользователя хранится в файле password.txt, а пароли хранятся в виде хеш-кода. Если пользователь вводит неверное имя пользователя или пароль, который не имеет такой же хеш-код, как хеш-код в записи, программа должна вывести «Unsuccessful login». Если пользователь вводит правильное имя пользователя, а пароль имеет тот же хеш, что и хеш в записи, то программа должна вывести «Войти успешно.»

Файл password.txt настроен так:

Real name:username:password_hash

Вопрос: Как мне найти в .txt строку и хэш-код?

Это код, который у меня есть сейчас:

   public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            Scanner sf = new Scanner("passwords.txt");
            String Username;
            String Password;

            System.out.println("Login ");
            System.out.println("Please Enter Username: ");
            Username = sc.next();

            System.out.println("Please Enter Password: ");
            Password = sc.next();

            String login = Username + ":" + Password.hashCode();
            System.out.println(login);

            while(sf.hasNextLine()){
                    if((login.equals(sf.nextLine().trim()))){
                            System.out.println("Login Successful!");
                            break;
                    }

                    if(!(login.equals(sf.nextLine().trim()))){
                            System.out.println("Login Unsuccessful!");

                    }
            }

Я пытаюсь найти код для строки, которая выглядит как имя пользователя: hashcodePassword

Проблемы: код не печатает оператор if и выдает эту ошибку при запуске программы

Ошибка:

Exception in thread "main" java.util.NoSuchElementException: No line found
        at java.util.Scanner.nextLine(Scanner.java:1540)
        at LoginApplication.main(LoginApplication.java:29)

1 Ответ

1 голос
/ 18 марта 2019

Простое объяснение: ваш код проверяет, есть ли у файла следующая строка, поэтому он проверяет первую вложенную , если , но здесь он читает строку из файла, и указатель на файл перемещается на следующую линия. Затем он проверяет следующую if инструкцию и здесь читается другая строка вашего файла. Проблема возникает из-за того, что вы на самом деле читаете две строки файла одновременно.

Решение

while(sf.hasNextLine()) {
                final String currentLine = sf.nextLine().trim();
                if(login.equals(currentLine)){
                        System.out.println("Login Successful!");
                        break;
                } else {
                        System.out.println("Login Unsuccessful!");
                }
        }

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

...