Java GUI Поиск слова из файла, а затем продолжить - PullRequest
0 голосов
/ 01 мая 2018

У меня есть графический интерфейс для входа пользователя.

Сначала пользователь создает свою учетную запись, и эта информация сохраняется в файле .txt. Я использую PrintWriter, чтобы добавить детали в этот файл. Детали хранятся с использованием разделителя. Я могу легко прочитать каждую деталь пользователя из файла.

В интерфейсе входа в систему у меня есть 2 JTtextField компонентов в JFrame, первый для имени пользователя и второй onw для пароля.

Я получаю значения, используя метод getText:

String user = user.getText();
String password = password.getText();

Я пытался использовать BufferedReader, но не могу заставить его работать:

if(user.equals(br.readline))

Что я хочу сделать, это сканировать файл, и если что-либо в этом файле совпадает с именем пользователя (getText от пользователя в кадре), тогда я хочу использовать SetVisible, чтобы перейти к следующему кадру

Моя проблема в том, что даже при неверном пароле и пользователе он переходит на новый кадр

Как я могу это исправить?

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

Scanner sc = new Scanner(new File("Details.txt"));
while(sc.hasNextLine()) {
    int val =0;
    String line = sc.nextLine();
    if(line.indexOf(user)   !=-1   && line.indexOf(pass)   !=-1) {
        JOptionPane.showMessageDialog(null,"Login");
        val = 1;
        vf.setVisible(true);
        break;
    } else {
        JOptionPane.showMessageDialog(null,"Invalid");
        val = 0;
        break;
    }
} 

Другой код, который используется в for, хотя даже в цикле do while, все еще не работает.

File file  = new File("Details.txt");
BufferedReader br = new BufferedReader(new FileReader("Details.txt"));
String Line;      

do{
    if(user.equals(br.readLine()) && pass.equals(br.readLine())){
        vf.setVisible(true);
    } else {
        JOptionPane.showMessageDialog(null,"Invalid");
    }
}while((Line=br.readLine())  !=null )

Вот как информация о пользователях хранится в моем файле.

=======================  
=======================  

 First Name = Ahmed Ali 
 Last Name = Qazi
 Address = Al-Abbass Colony pHase 2
 Phone Number = +92032329301
 Email Address = ahmedrider56@gmail.com
 UserName = ahmedfirst67
 Password = dangerd = 2hg

=======================  
=======================  







=======================  
=======================  

 First Name = Ahm345 
 Last Name = Qa345
 Address = Al-asfafs
 Phone Number = +92032329301
 Email Address = ahmgsdg
 UserName = ahmegg
 Password = dagg 

1 Ответ

0 голосов
/ 01 мая 2018

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

  • Сканируйте файл, пока не найдете имя пользователя.
  • Найдя имя пользователя, продолжайте сканирование, пока не достигнете строки пароля.
  • Прочтите этот пароль и выйдите из цикла сканирования.
  • Затем сравните данный пароль с тем, который вы нашли в файле.

Вот код:

private static boolean checkCredentials(String user, String pass) throws IOException {

    Scanner sc = new Scanner(new File("Details.txt"));

    boolean userFound = false;
    String correctPassword = null;

    String line;
    while(sc.hasNextLine()) {
        line = sc.nextLine();
        // find the user
        if(!userFound) {
            userFound = line.contains("UserName = "+user);
        } else {
            // find the password
            if(line.contains("Password = ")) {
                correctPassword = line.substring(line.indexOf("=") + 2);
                break;
            }
        }
    }

    return correctPassword!=null && correctPassword.equals(pass);
}


public static void main(String[] args) throws IOException {
    System.out.println(checkCredentials("Bob", "dagg"));
    System.out.println(checkCredentials("ahmegg", "daggy"));
    System.out.println(checkCredentials("ahmegg", "dagg"));
}

Это печатает:

false
false
true

Вставьте его в свой код так:

val = 0;
String message = "Invalid";
if(checkCredentials(user, pass)) {
    message = "Login";
    val = 1;
    vf.setVisible(true);
}
JOptionPane.showMessageDialog(null, message);

Примечание:

Было бы намного проще, если бы вы хранили данные в одной строке следующим образом:

Ahmed Ali|Qazi|Al-Abbass Colony pHase 2|+92032329301|ahmedrider56@gmail.com|ahmedfirst67|dangerd = 2hg
Ahm345|Qa345|Al-asfafs|+92032329301|ahmgsdg|ahmegg|dagg 

Вы можете использовать метод String.split для анализа каждой строки и одновременного получения имени пользователя и пароля.

ПРИМЕЧАНИЕ 2:

Также очень плохо хранить пароль в незашифрованном виде. Если это школьное упражнение, то это хорошо, но если оно предназначено для реального проекта, вам может понадобиться шифрование паролей в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...