2016-04-17 2 views
0

テキストファイルをループしているため、テキストファイルの内容とユーザーが送信したパラメータを比較する必要があります。これまでに書いたコードは、テキストファイルの最後の値だけを比較します。 質問:どのように私は継続的にループし、Vパラメータが渡された内容をチェックし、その間に一致すると停止しますか?ファイル処理:テキストファイルをループして継続的にパラメータを比較する

は、ここで私がこれまで持っているものです。

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

ありがとう! Query6273

+0

エラーが発生していますか? –

+0

これはうまくいきませんが、.txt内の最後の値だけを比較しているようです。私はそれがファイルの最後の値を読み取ると仮定しているし、チェックを行う..これは動作する必要がありますか? – Query6273

答えて

0

あなたのコードは、ファイルのすべての行をユーザー名とパスワードと比較します。しかし、各反復では、前の値statusを現在の行の状態に置き換えます。

最後の行のステータスが返されます。

あなたが探しているユーザーを見つけたらすぐにループから脱出する必要があります。例えば:スキャナが適切に閉じなければならないことを

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

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

又は

// 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; 

注意。 try-with-resourcesを使用してください。

関連する問題