2016-04-17 1 views
0

Ich bin durch die Textdatei und muss den Inhalt der Textdatei mit Parametern vergleichen, die von einem Benutzer übergeben werden. Der Code, den ich bisher geschrieben habe, vergleicht nur den letzten Wert in der Textdatei. Frage: Wie würde ich kontinuierlich den Inhalt V-Parameter durchlaufen und überprüfen, zu stoppen, wenn es eine Übereinstimmung zwischen den beiden gibt?Dateibehandlung: Textdatei durchlaufen und kontinuierlich Parameter vergleichen

Hier ist, was ich bisher:

public boolean isAuthenticated(String username, String password) throws FileNotFoundException{ 
    boolean status = true; 
    File file = new File("C:\\" "\\" "\\login.txt"); 
    Scanner scan = new Scanner(file); 

    List<Login> login = new ArrayList<Login>(); 

    while(scan.hasNextLine()){ 
     String line = scan.nextLine(); 
     String [] details = line.split(":"); 
     String storedUsername = details[0]; 
     String storedPassword = details[1]; 
     Login l = new Login(username, password); 

     if(storedUsername.equals(username)&& storedPassword.equals(password)){ 
      status = true; 
     }else{ 
      status = false; 
     } 

    } 
    return status; 
} 

Dank! Query6273

+0

erhalten Sie einen Fehler? –

+0

Nein, das funktioniert einwandfrei, es scheint nur der letzte Wert in der .txt zu vergleichen. Ich gehe davon aus, dass es bis zum letzten Wert der Datei liest dann die Überprüfung .. sollte das funktionieren? – Query6273

Antwort

0

Ihr Code vergleicht jede Zeile der Datei mit dem Benutzernamen und dem Kennwort. Bei jeder Iteration ersetzen Sie jedoch den vorherigen Wert status durch den Status der aktuellen Zeile.

Sie geben also den Status der letzten Zeile zurück.

Sie müssen aus der Schleife ausbrechen, sobald Sie den gesuchten Benutzer gefunden haben. Zum Beispiel:

while (scan.hasNextLine()) { 
    ... 

    if (storedUsername.equals(username) && storedPassword.equals(password)) { 
     return true; 
    } 
} 

oder

// we haven't found the user yet, so status is false 
boolean status = false; 

while (scan.hasNextLine() && !status) { 
    ... 

    if (storedUsername.equals(username) && storedPassword.equals(password)) { 
     status = true; 
    } 
} 
return status; 

Beachten Sie, dass der Scanner sollte richtig geschlossen werden. Sie sollten try-with-resources verwenden.