Java:从文件中的特定行获取信息

时间:2014-04-18 16:33:12

标签: java file login

我已经制作了这个漂亮的登录程序,其中所有用户名都在一个.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行),用户就会陷入低谷。

2 个答案:

答案 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
}

这只是一个给你和想法的草图(它没有考虑特殊情况,因为用户插入了一个不存在的用户名,依此类推......)