2013-01-20 7 views
1

J'ai écrit le code suivant pour lire deux fichiers texte différents. Un fichier texte est appelé le fichier texte "nom d'utilisateur", tandis que l'autre est appelé le fichier texte "mot de passe". Je crée un programme de connexion. Pour que l'utilisateur puisse se connecter avec succès, le numéro de ligne du nom d'utilisateur doit correspondre à celui du mot de passe. Pour une raison quelconque cependant, mon LineNumberReader pour les deux fichiers est bloqué à zéro, ce qui est étrange parce que j'ai mis des assertions pour éviter cela et les assertions n'ont pas jeté une erreur. Je sais qu'ils sont nuls parce que j'ai imprimé chaque lecteur. Il continue également d'imprimer "Match trouvé" même lorsque je mets délibérément un mauvais nom d'utilisateur-mot de passe. Quelqu'un peut-il comprendre cela?Howcome LineNumberReader retourne toujours zéro dans Java?

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

peut-être ce n'est pas la réponse que vous voulez ... mais ... si vous utilisez une ligne au format "nom d'utilisateur: mot de passe"? et utilisez f.readLine(). split (":")? – ggrandes

+0

Oui j'ai pensé à cela plus tôt, et je le ferai s'il n'y a vraiment pas de solution à ce problème. Mais je ne comprends tout simplement pas pourquoi cela ne fonctionne pas. Je suis nouveau à Java alors peut-être qu'il y a quelque chose que je ne vois pas mais il semble que mon code devrait fonctionner. –

+0

Je vois que vous incrémentez br et br2 mais vous n'incrémentez pas lnr ou lnr2. Comment est-il supposé savoir quel numéro de ligne chercher? Aussi, à quel moment avez-vous déterminé que vos lecteurs de numéro de ligne sont bloqués à 0? Je ne vois aucune sortie. Linereader est-il capable de lire le contenu du fichier? Je pense que vous feriez mieux d'incrémenter la ligne de l'utilisateur et le mot de passe pour chaque itération dans sa boucle respective et de définir un booléen si le nom d'utilisateur ou mot de passe a été trouvé. Tous ensemble, je pense que vous devriez les mettre dans un seul fichier. – mac10688

Répondre

1

Vous ne faites pas avancer votre LineNumberReader chaque boucle. La boucle while prend soin de faire avancer votre BufferedReader.

Vous pouvez réellement simplifier les choses et simplement utiliser le LineNumberReader sans BufferedReaders parce que leur readLine vous donnera le texte tout comme un BufferedReader. Par exemple:

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

L'appel à readLine sur les LineNumberReader avances à la ligne suivante (et donc augmentera le nombre de ligne aussi).

+0

cela fonctionne. Merci. Juste une question cependant, dois-je fermer lnr après la boucle while ou juste mettre une pause dans ma déclaration if? –

Questions connexes