我已经制作了这个漂亮的登录程序,其中所有用户名都在一个.txt文件中,所有密码都在另一个.txt文件中。因此,当用户输入用户名并且它对应于第一个文件的第5行的其中一个名称时,我希望程序从第二个文件的第5行读取密码,看看它是否与给定的密码匹配由用户。我只是不知道如何从特定文件中读取或如何查看它是什么行,
这是我现在的代码。
package databarry_;
import java.util.*;
import java.io.*;
import java.lang.*;
import javax.swing.JOptionPane;
public class interfacelogin {
public static void main (String[] args) {
boolean check1=false, check2=false, check3=false;
int trys = 3;
while (check3 == false){
int id1 = 0;
int id2 = 0;
String username = null;
String password = null;
Scanner fileout = null;
Scanner fileout2 = null;
try{
fileout = new Scanner(new File("username.txt"));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Fatal Error, please Reboot or reinstal program", "Boot", JOptionPane.PLAIN_MESSAGE);
}
String Username = JOptionPane.showInputDialog("Please enter your username");
while(fileout.hasNext()){
username = fileout.next();
if(Username.equals(username))
check1=true;
}
try{
fileout2 = new Scanner(new File("password.txt"));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Fatal Error, please Reboot or reinstal program", "Boot", JOptionPane.PLAIN_MESSAGE);
}
String Password = JOptionPane.showInputDialog("Please enter your username");
while(fileout2.hasNext()){
password = fileout2.next();
if(Password.equals(password) && id1 == id2)
check2=true;
}
if (check1 == true && check2 == true){
JOptionPane.showMessageDialog(null, "succeded", "login", JOptionPane.PLAIN_MESSAGE);
check3 = true;
} else {
if (trys > 1){
trys--;
JOptionPane.showMessageDialog(null, "bad login, you have " + trys + " try's remaining", "login", JOptionPane.PLAIN_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "To many bad logins, program is closing", "login", JOptionPane.PLAIN_MESSAGE);
check3 = true;
}
}
}
}
}
正如您所看到的那样,唯一重要的一点是,如果您输入的密码和用户名不在同一行(因此没有相互链接)在文件中(例如第5行),用户就会陷入低谷。
答案 0 :(得分:0)
最好的方法是读取这两个文件并将您的登录/密码对存储在
中HashMap<String, String>
然后您可以轻松检查,如果输入的登录密码对是匹配的。
Map<String, String> map = new HashMap<>();
while(fileout.hasNext() && fileout2.hasNext()){
username = fileout.next();
password = fileout2.next();
map.put(username, password);
}
...
if (password.equals(map.get(username)) {
...
}
答案 1 :(得分:0)
如果您没有内存问题,或者用户数量不是很高,我建议您在程序启动时只将两个文件一起读取,并使用以下内容将数据存储在HashMap中user为密钥,密码为value:
BufferedReader users = new BufferedReader(new FileReader("username.txt"));
BufferedReader passwords = new BufferedReader(new FileReader("password.txt"));
HashMap logins = new HashMap<String, String>();
String user,pass;
while ((user=users.readLine())!=null) {
pass=passwords.readLine();
logins.put(user, pass);
}
然后检查用户名/密码:
String username = null; //the username specified by the user
String password = null; //the password specified by the user
if (logins.get(user).compareTo(password)==0) {
//correct pass
} else {
//wrong pass
}
这只是一个给你和想法的草图(它没有考虑特殊情况,因为用户插入了一个不存在的用户名,依此类推......)