首页 > 解决方案 > 从文本文件中读取用户名和密码并将它们与文本字段进行比较是行不通的,即使它们完全相同

问题描述

我需要创建一个登录/注册应用程序来存储和检索文件(.txt)中的用户信息。因此,我将文件中的用户名和密码与文本字段中的用户名和密码进行比较,即使它们完全相同,程序仍然不会匹配它们。

它在某个时候起作用,但那是我只Login上课的时候。在我完成Register课程后,即使我没有更改Login课程中的任何内容,它也无法正常工作。我也尝试像第一次那样手写txt,但没有运气。

Login班级:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

class Login extends JFrame implements ActionListener {

    JButton SUBMIT;
    JPanel panel;
    JLabel label1, label2;
    final JTextField text1, text2;

    Login() {
        label1 = new JLabel();
        label1.setText("Username:");
        text1 = new JTextField(15);

        label2 = new JLabel();
        label2.setText("Password:");
        text2 = new JPasswordField(15);

        SUBMIT = new JButton("SUBMIT");

        panel = new JPanel(new GridLayout(3, 1));
        panel.add(label1);
        panel.add(text1);
        panel.add(label2);
        panel.add(text2);
        panel.add(SUBMIT);
        add(panel, BorderLayout.CENTER);
        SUBMIT.addActionListener(this);
        setTitle("LOGIN FORM");
    }

    public void actionPerformed(ActionEvent ae) {
        File loginf = new File("filename.txt");

        try {
            Scanner read = new Scanner(loginf);
            read.useDelimiter("\\n|,");
            boolean login = false;
            while (read.hasNext()) {
                String user = read.next();
                String pass = read.next();
                String thisuser = text1.getText();
                String thispass = text2.getText();
                System.out.println(user + " " + pass);
                System.out.println(thisuser + " " + thispass);
                if (thisuser.equals(user) && thispass.equals(pass)) {
                    System.out.println("OOOKKKK");
                    login = true;
                    break;
                }
            }
            if (login) {
                NextPage page = new NextPage();
                page.setVisible(true);
                JLabel label = new JLabel("Welcome:" + text1.getText());
                page.getContentPane().add(label);
                setVisible(false);
            } else {
                JOptionPane.showMessageDialog(null, "Incorrect username or password");
                text1.setText("");
                text2.setText("");
            }
            read.close();
        } catch (FileNotFoundException qwerty) {
            JOptionPane.showMessageDialog(null, "Can't find a text file");
        }
    }

}

Register我正在使用的部分课程:

ln95: FileWriter out = null;
ln98: out = new FileWriter("filename.txt", true);


ln149:out.write(username + "," + pass);
ln150:out.write(System.getProperty("line.separator"));

登录输出:

student1 Student1
student2 Student2    
student2 Student2
student2 Student2    
student3 Student3
student2 Student2

标签: javalogin

解决方案


您从登录中列出的输出似乎有一个额外的回车,这就是为什么似乎有一个空行。我认为这是来自以下代码。

            System.out.println(user + " " + pass);
            System.out.println(thisuser + " " + thispass);

如果是这种情况,则thispass有一个额外的回车。这就是问题所在。


推荐阅读