Как читать файл построчно и сохранять значение c - PullRequest
1 голос
/ 25 февраля 2020

Мне нужна помощь, на которой я застрял некоторое время, так как я новичок в java. Я создал панель входа в консоль, где для входа в систему заданы имя пользователя и пароль по умолчанию. и они могут создать учетную запись, которая хранит имя пользователя в файле username.txt и пароль в файле passwords.txt. Я хочу знать, как я могу получить его, чтобы функции построчно считывали txt-файлы для имени пользователя и пароля, пока оно не совпадет с именем пользователя с существующим в файле имени пользователя и совпадет с паролем, чтобы войти в систему.

Это функция чтения из файла:

public static void readFromFile() throws Exception {
    BufferedReader saveUsrFile, savePwFile;
    try {
        saveUsrFile = new BufferedReader(new FileReader("username.txt"));
        String line_u = saveUsrFile.readLine();

        while (line_u != null && saveUsrFile.readLine().equals(LP.username)) {
              cusUsr = saveUsrFile.readLine();
        }
        saveUsrFile.close();

        savePwFile = new BufferedReader(new FileReader("passwords.txt"));
        String line_p = savePwFile.readLine();

        while (line_p != null && savePwFile.readLine().equals(LP.password)) {
              cusPass = savePwFile.readLine();
        }
        savePwFile.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

Это панель входа в систему:

import java.util.Scanner;

public class LoginPanel {

    static String username;
    static String password;

    public LoginPanel() {}

    public static void main(String[] args) {

        boolean flag = true;    
        Passenger p = new Passenger();
        Scanner input = new Scanner(System.in);

        while(flag == true) {
            System.out.println("Enter Username: ");
            username = input.nextLine();
            System.out.println("Enter Password: ");
            password = input.nextLine();

            if ((password.equals(p.DefPass) && username.equals(p.DefUser)) || (password.equals(p.cusPass) && username.equals(p.cusUsr))) {
                System.out.println("Passenger login successful!");
                p.display();
            } else {
                System.out.println("Please check your username or password and try again!");  
            }   
        }
    }   
}

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

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Упрощенный поток будет выглядеть как

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String username, password;
        System.out.print("Enter Username: ");
        username = input.nextLine();
        System.out.print("Enter Password: ");
        password = input.nextLine();

        if (authenticated(username, password)) {
            System.out.println("Passenger login successful!");
        } else {
            System.out.println("Please check your username or password and try again!");
        }
    }

    static boolean authenticated(String username, String password) {
        BufferedReader saveUsrFile, savePwFile;
        boolean usrFound = false, pwFound = false;
        try {
            saveUsrFile = new BufferedReader(new FileReader("username.txt"));
            String line_u = saveUsrFile.readLine();
            while (line_u != null) {
                if (line_u.equals(username)) {
                    usrFound = true;
                    break;
                }
                line_u = saveUsrFile.readLine();
            }
            saveUsrFile.close();

            savePwFile = new BufferedReader(new FileReader("password.txt"));
            String line_p = savePwFile.readLine();
            while (line_p != null) {
                if (line_p.equals(password)) {
                    pwFound = true;
                    break;
                }
                line_p = savePwFile.readLine();
            }
            savePwFile.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return usrFound && pwFound;
    }
}

Пробный прогон:

Enter Username: hello
Enter Password: bye
Please check your username or password and try again!

Другой пробный прогон:

Enter Username: hello
Enter Password: Abc123
Passenger login successful!

Содержимое username.txt:

hello
world
abc
xyz
hi
bye

Содержимое password.txt:

Abc123
456Abc
Xyz123
456Xyz
123Abc
123Xyz

Примечание: В этой демонстрации username и password не проверяются на их порядок в соответствующих файлах.

0 голосов
/ 25 февраля 2020

Я бы предложил использовать Java NIO. У вас есть хороший метод, который возвращает поток строк из файла, и это здорово, потому что вы можете делать все эти причудливые потоковые вещи, как это:

String password = "givenPassword";
Path path = Paths.get("passwordFileName");
Optional<String> passwordOptional = Files.lines(path)
      .filter(line -> password.equals(line))
      .findAny();
boolean isPasswordFound = passwordOptional.isPresent();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...