java - 从文本文件中读取用户名和密码并将它们与文本字段进行比较是行不通的,即使它们完全相同
问题描述
我需要创建一个登录/注册应用程序来存储和检索文件(.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
解决方案
您从登录中列出的输出似乎有一个额外的回车,这就是为什么似乎有一个空行。我认为这是来自以下代码。
System.out.println(user + " " + pass);
System.out.println(thisuser + " " + thispass);
如果是这种情况,则thispass
有一个额外的回车。这就是问题所在。
推荐阅读
- angular - 从 Angular 2 + 中的外部脚本访问方法
- flask - 我在 IIS 中托管我的 Flask Web 应用程序时遇到问题
- amazon-web-services - AWS - Strongswan :: 如何让子网中的客户端进行通信?
- javascript - highchart 工具提示不跟随鼠标
- python - 如何在画布 tkinter 上移动按钮?
- windows - 在 Windows 上的 STDIN 上使用 IO::Select
- powershell - 从 Powershell 中的 WinForm 按钮中删除 Add_Click (remove_Click)
- mysql - 查询数据库性能和软件可靠性
- airflow - Apache 气流仅向列表中的第一人发送 SLA 未命中电子邮件
- ios - Swift 动态变量名称取决于值