【发布时间】:2016-11-04 12:24:05
【问题描述】:
我编写了一个非常简单的程序,它从文本文件中读取用户名和密码,其中用户名和密码用逗号分隔。文本文件的内容包含以下
accounts.txt
亚历克斯,1234
大卫,5678
我的java应用是这样写的
public class Authenticate {
public void signIn(String username, String password) throws IOException {
FileReader fr = new FileReader("location/accounts.txt");
BufferedReader br = new BufferedReader(fr);
while (true) {//read file line by line
String line = br.readLine();
if (line == null) {
break;
}
String splitByComma = ",";
String[] details = line.split(splitByComma);
String registeredUser = details[0];
String registeredPass= details[1];
if(username.equals(registeredUser) && password.equals(registeredPass)){
System.out.println("signed in successfully!");
}
else{
System.out.println("sign in failed");
}
}
br.close();
}
}
调用程序的我的App类:
public class App {
public static void main(String[] args) throws IOException {
Register register = new Register("location/accounts.txt");
Authenticate auth = new Authenticate();
auth.signIn("David", "5678");
}
}
问题是当我在方法中传递“Alex”“1234”时,输出是
登录成功!
登录失败
当我传入“David”“5678”时,我得到了
登录失败
登录成功!
我希望应用程序根据输入的凭据仅输出一次“登录成功”和“登录失败”。
非常感谢!
【问题讨论】:
-
只需创建一个字符串变量:String result = "sign in failed";在你的循环之前。如果找到用户,则将结果更改为您的结果。在循环之后将结果变量写入控制台输出。此外,您还可以在找到用户时休息一下 -> 如果找到匹配项,则无需阅读其余部分
-
我对这个问题有了更好的理解。每次遍历文件并找到不匹配的用户名和密码时,它都会调用“登录失败”,直到最终找到用户名和密码,它将调用“登录成功”n
-
如果这是你想要的,只需添加 break;成功后的控制台输出
-
仍然打印失败和成功。这是因为输入只匹配文件的第二行,这就是它打印失败然后成功的原因。
-
如果您只想显示一个状态,请查看我的第一条评论。我不完全清楚你到底想展示什么。
标签: java arrays split filereader