为什么LineNumberReader在Java中总是返回零?
我编写了以下代码来读取两个不同的文本文件。一个文本文件称为“用户名”文本文件,另一个称为“密码”文本文件。我正在创建一个登录程序。为了让用户成功登录,用户名的行号必须与密码的行号匹配。然而,出于某种原因,我的两个文件的LineNumberReader都被固定在零,这很奇怪,因为我使用断言来避免这种情况,并且断言没有抛出错误。我知道它们是零,因为我打印了每个阅读器。即使我故意输入了错误的用户名密码匹配,它也会不断打印出“找到匹配项”。有人能弄明白吗为什么LineNumberReader在Java中总是返回零?,java,Java,我编写了以下代码来读取两个不同的文本文件。一个文本文件称为“用户名”文本文件,另一个称为“密码”文本文件。我正在创建一个登录程序。为了让用户成功登录,用户名的行号必须与密码的行号匹配。然而,出于某种原因,我的两个文件的LineNumberReader都被固定在零,这很奇怪,因为我使用断言来避免这种情况,并且断言没有抛出错误。我知道它们是零,因为我打印了每个阅读器。即使我故意输入了错误的用户名密码匹配,它也会不断打印出“找到匹配项”。有人能弄明白吗 public boolean usern
public boolean usernamePasswordCheck(String username, String password) throws FileNotFoundException, IOException{
BufferedReader br = new BufferedReader(new FileReader("src/BioStat/username.txt"));
BufferedReader br2 = new BufferedReader(new FileReader("src/BioStat/password.txt"));
String line;
String line2;
int userLine=0;
int passwordLine=0;
LineNumberReader lnr = new LineNumberReader(new FileReader("src/BioStat/username.txt"));
LineNumberReader lnr2 = new LineNumberReader(new FileReader("src/BioStat/password.txt"));
while((line=br.readLine())!=null){
if(line.equals(username)){
//username is found in username list. There is a match!
//let's get it's line number
userLine = lnr.getLineNumber();
}else{
//username was not found in list, so we should keep reading.
line = br.readLine();
}
}
System.out.println("Userline: "+userLine);
br.close();
while((line2 = br2.readLine())!=null){
if(line2.equals(password)){
//username is found in username list. There is a match!
//let's get it's line number
passwordLine = lnr2.getLineNumber();
}else{
//username was not found in list, so we should keep reading.
line2 = br2.readLine();
}
}
System.out.println("passwordLine: "+passwordLine);
br2.close();
assert(userLine!=0);
assert(passwordLine!=0);
if(userLine==passwordLine){
System.out.println("Match Found");
matchfound = true;
}else{
System.out.println("Username and Password don't match");
}
return matchfound;
}
您没有推进
LineNumberReader
每个循环。while
循环负责推进BufferedReader
实际上,您可以简化事情,只使用LineNumberReader
而不使用BufferedReaders,因为它们的readLine将像BufferedReader
一样为您提供文本。例如:
String line = null;
int userLine=0;
LineNumberReader lnr = new LineNumberReader(new FileReader("src/BioStat/username.txt"));
while((line=lnr.readLine())!=null){
if(line.equals(username)){
//username is found in username list. There is a match!
//let's get it's line number
userLine = lnr.getLineNumber();
break;
}
}
lnr.close();
在
LineNumberReader
上对readLine
的调用将前进到下一行(因此也将增加行号)。您并不是在每个循环中前进LineNumberReader
。while
循环负责推进BufferedReader
实际上,您可以简化事情,只使用LineNumberReader
而不使用BufferedReaders,因为它们的readLine将像BufferedReader
一样为您提供文本。例如:
String line = null;
int userLine=0;
LineNumberReader lnr = new LineNumberReader(new FileReader("src/BioStat/username.txt"));
while((line=lnr.readLine())!=null){
if(line.equals(username)){
//username is found in username list. There is a match!
//let's get it's line number
userLine = lnr.getLineNumber();
break;
}
}
lnr.close();
在
LineNumberReader
上调用readLine
会前进到下一行(因此也会增加行号)。也许这不是您想要的答案。。。但是如果您使用格式为“用户名:密码”的一行?使用f.readLine().split(“:”)?是的,我之前考虑过这个问题,如果这个问题真的没有解决方案,我会这么做。但我不明白为什么这不起作用。我是Java新手,所以可能有些东西我没有看到,但我的代码似乎应该可以工作。我看到您正在递增br和br2,但您没有递增lnr或lnr2。它怎么知道取什么行号?另外,您在什么时候确定您的行号读取器卡在0?我没有看到任何输出。linereader也能读取文件的内容吗?我认为最好在各自的循环中为每个迭代增加userline和password行,如果找到用户名或密码,则设置一个布尔值。总之,我认为你应该把它们放在一个文件中。也许这不是你想要的答案。。。但是如果您使用格式为“用户名:密码”的一行?使用f.readLine().split(“:”)?是的,我之前考虑过这个问题,如果这个问题真的没有解决方案,我会这么做。但我不明白为什么这不起作用。我是Java新手,所以可能有些东西我没有看到,但我的代码似乎应该可以工作。我看到您正在递增br和br2,但您没有递增lnr或lnr2。它怎么知道取什么行号?另外,您在什么时候确定您的行号读取器卡在0?我没有看到任何输出。linereader也能读取文件的内容吗?我认为最好在各自的循环中为每个迭代增加userline和password行,如果找到用户名或密码,则设置一个布尔值。总的来说,我认为你应该把它们放在一个文件中。它是有效的。谢谢不过有一个问题,我应该在while循环之后关闭lnr还是在if语句中加一个中断?它是有效的。谢谢不过有一个问题,我应该在while循环之后关闭lnr还是在if语句中加一个中断?