2014-01-13 3 views
1

Я пытаюсь создать JFrame, который проверяет, соответствует ли текст, размещенный в JTextField, такой же, как информация в TXT-файле. Тогда, если это правильно, он проверяет, соответствует ли информация в JPasswordField информации в файле .txt.Почему мой код проверки строкой не работает

public void actionPerformed(ActionEvent e) 
{ 
    if(e.getSource() == button) 
    { 
     if(!username.getText().equals("") && passIsGood()) 
     { 
      try 
      { 
       Scanner reader = new Scanner(new File("users.txt")); 
       reader.useDelimiter("\t|\n"); 
       reader.nextLine(); 
       while(reader.hasNextLine()) 
       { 
        if(reader.next().equals(username.getText())) 
        { 
         //Username is correct, now checks for password: 
         System.out.println("Username passed");  
         if(reader.next().equals(passToString())) 
         { 
          //Username & Password are correct 
          System.out.println("Password passed"); 
          break; 
         } 
        } else if(!reader.hasNextLine()) 
        { 
         wrongInfo(); 
        } else 
        { 
         reader.nextLine(); 
        } 
       } 
       reader.close(); 
       frame.dispose(); 
      } catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null, ex); 
      } 
     } else 
     { 
      JOptionPane.showMessageDialog(null, "Please enter a valid Username and Password"); 
     } 
    } 
} 

private static String passToString() 
{ 
    String passString = new String(password.getPassword()); 
    return passString; 
} 

я, насколько это имя пользователя мимоходом, но я чувствую, как .equals (passToString()) может быть причиной проблемы. Текстовый файл выглядит следующим образом: Имя пользователя Пароль тест thetest test2 thetest3

Обратите внимание, что пробелы в области между каждой вкладки, следовательно, мой разделителем, используя («\ т | \ п»);

+0

после каждого второго поля в user.txt это новая строка – Otanan

+0

Зачем вам нужно вызвать reader.nextLine() в верхней части? – sasankad

+0

@sasankad Первая строка в моем .txt-файле была для форматирования, она сказала «Username password» в качестве первой строки, чтобы указать, как записать остальные, и я хотел проигнорировать ее. – Otanan

ответ

1

Строки, содержащиеся в ваших текстовых полях, могут содержать некоторые нежелательные символы. Используйте домен символа (все значения ascii, которые являются символом), чтобы избавиться от них. Попробуйте это:

import java.io.File; 
import java.util.Scanner; 

public class readUsers { 

    public static void main(String[] args) { 
     try { 
      Scanner reader = new Scanner(new File("users.txt")); 
      reader.useDelimiter("\t|\n"); 

      String username = "username"; 
      String password = "password"; 

      for (int i = 0; i < username.length(); i++) { 
       //replace possible unwanted characters 
       if (username.charAt(i) < 33 || username.charAt(i) > 126) 
        username = username.replace(Character.toString(username.charAt(i)), ""); 
      } 

      for (int j = 0; j < password.length(); j++) { 
       //replace possible unwanted characters 
       if (password.charAt(j) < 33 || password.charAt(j) > 126) 
        password = password.replace(Character.toString(password.charAt(j)), ""); 
      } 

      while (reader.hasNextLine()) { 
       String user = reader.next(); 
       String pass = reader.next(); 

       //if username equals the user in the textfile, check if password equals the pass in the file 
       if (user.equals(username)) { 
        System.out.println("username passed!"); 
        if (pass.equals(password)) 
         System.out.println("password passed!"); 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Мой текстовый файл выглядит следующим образом:
имя пользователя пароль
username2 пароль

P.S. Это мой первый ответ StackOverFlow, поправьте меня, если я что-то сделаю неправильно :)

+0

Спасибо за ваш ответ! Я нашел более простое решение, хотя, оказывается, моя проблема заключалась в том, что имя пользователя содержало, казалось бы, незаметное \ n в начале, поэтому я просто использовал String.trim(); метод, чтобы исправить это, спасибо вам! – Otanan

+1

Я не мог знать, какой персонаж вызвал проблему, хотя;) – pietv8x

Смежные вопросы