2013-01-20 1 views
1

두 개의 다른 텍스트 파일을 읽으려면 다음 코드를 작성했습니다. 한 텍스트 파일을 "사용자 이름"텍스트 파일이라고하며, 다른 하나는 "비밀번호"텍스트 파일이라고합니다. 나는 로그인 프로그램을 만들고있다. 사용자가 성공적으로 로그인하려면 사용자 이름의 줄 번호가 암호의 줄 번호와 일치해야합니다. 그러나 어떤 이유로 든 두 파일의 LineNumberReader가 제로에 머물러 있습니다.이 문제를 피하기 위해 어설 션을 넣기 때문에 이상합니다. 어설 션은 오류를 발생시키지 않았습니다. 나는 각 독자를 인쇄하기 때문에 그들이 0다는 것을 알고있다. 또한 의도적으로 잘못된 사용자 이름 - 암호 일치를 입력 한 경우에도 "일치하는 항목 찾기"에서 인쇄를 계속합니다. 아무도 이것을 알아낼 수 있습니까?LineNumberReader는 Java에서 항상 0을 반환합니까?

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; 
} 
+0

아마도이 답변은 원하는 답변이 아니지만 ... "username : password"형식으로 한 줄을 사용한다면? f.readLine().을 사용하십시오. split (":")? – ggrandes

+0

그래, 이전에 이것에 대해 생각해 봤는데, 정말로이 문제에 대한 해결책이 없다면 나는 그것을 할 것이다. 하지만 왜 이것이 작동하지 않는지 나는 이해하지 못합니다. 나는 Java에 익숙하지 않아서 내가 보지 못하는 것이 있을지 모르지만 코드가 작동해야하는 것처럼 보입니다. –

+0

나는 당신이 br와 br2를 증가시키고 있지만 lnr이나 lnr2를 증가시키지 않는다는 것을 알았다. 가져올 행 번호를 어떻게 알 수 있습니까? 또한, 귀하의 회선 번호 독자가 0으로 고정되어 있다고 결정한 시점은 언제입니까? 출력이 보이지 않습니다. linereader는 파일의 내용을 읽을 수 있습니까? 난 당신이 더 나은 각각의 반복에서 각 반복에 대한 userline과 비밀 번호 라인을 증가 것이라고 생각하고 부울을 설정하면 사용자 이름이나 비밀 번호가 발견되었습니다. 모두한데 모아서 하나의 파일에 넣어야한다고 생각합니다. – mac10688

답변

1

귀하는 모든 루프를 LineNumberReader 앞으로 나아 가지 않습니다. while 루프가 BufferedReader을 처리하는 중입니다.

실제로 readline이 BufferedReader과 같은 텍스트를 제공하기 때문에 BufferedReader없이 실제로는 단순화하고 LineNumberReader을 사용할 수 있습니다. 예를 들면 :는

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(); 

다음 행으로 진행 LineNumberReaderreadLine에 대한 호출 (및도 행 번호를 증가시킬 것이다).

+0

작동합니다. 감사. 단 하나의 질문이지만, while 루프를 종료하거나 if 문에 휴식을 취해야합니까? –

관련 문제