Java GUI从文件搜索Word然后继续

时间:2018-05-01 12:34:45

标签: java swing user-interface

我有一个用户登录的GUI。

首先,用户创建自己的帐户,该信息存储在.txt文件中。我使用PrintWriter在该文件中附加详细信息。 使用分隔符存储详细信息。我可以从文件中轻松阅读用户的每个细节。

在登录界面中,我在JTtextField中有2个JFrame个组件,第一个是用户名,第二个是密码。

我使用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 :(得分:1)

根据您的文件结构,这不是直截了当的,但您可以这样做:

  • 扫描文件,直至找到用户名。
  • 找到用户名后,请继续扫描,直至到达密码行。
  • 阅读此密码并退出扫描循环。
  • 然后将给定的密码与您在文件中找到的密码进行比较。

以下是代码:

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:

将密码未加密存储也是非常糟糕的做法。如果这是一个学校练习,那很好,但如果是真实生活项目,你可能想看看加密文件中的密码。