BufferedReader 不会读取

BufferedReader won't read

我有一个程序,用户名和密码在一个文本文件中,文本文件如下所示:

election:12345

我有这段代码可以读取文件

try {
    BufferedReader read=new BufferedReader(new FileReader("election_un_pass.txt"));
    String line="";

    while((line=read.readLine())!=null) {
        String [] info=line.split(":");

        if(info[0].matches(Login.uname) && info[1].matches(Login.pass)){
            new Main();
        } else {
            JOptionPane.showMessageDialog(null, "Username or Password might not be correct");
        }
        Login.txtUName.setText("");
        Login.txtPassword.setText("");
     }
} catch (Exception e1) {
    e1.printStackTrace();
}

每次我运行我的程序,即使我输入的用户名和密码是正确的,Username or Password might not be correct消息仍然会出现,new Main()不会出现。

你可以:

  1. 了解如何在您使用的 IDE 中进行调试。使用调试模式,您可以一次执行一行代码,并查看每一点的变量值。
  2. 增加错误发生时的日志信息

例如,您可以打印到 console/logs/dialog:

String msg = String.format("could not find user name: [%s] and password: [%s] in line: [%s]", Login.uname, Login.pass, line);

显然,出于安全原因,当输入了不正确的值时,您不应该在任何地方打印预期的用户名和密码,但这可能是找出问题所在的快速方法:)它可以像尾随一样简单某处空白字符或某处不正确的大小写。

您确定要使用 String.matches(regex) 进行比较吗?该参数被视为正则表达式,因此 Login.unameLogin.pass 值中的任何正则表达式元字符都将被解释为正则表达式。这意味着您的比赛可能会以您意想不到的方式发挥作用。

我怀疑你真的想说:

if (info[0].equals(Login.uname) && info[1].equals(Login.pass)) {

相反。