Создание страницы входа в консольное приложение Java с использованием TXT-файла - PullRequest
0 голосов
/ 06 сентября 2010

Я создаю консольное приложение Java, и мне нужно использовать файл блокнота (TXT) для хранения PIN, AccountNo и баланса.Когда пользователь вводит PIN-код (из BufferedReader), он должен быть подтвержден из файла блокнота и войти в систему.Однако фрагмент кода, который я использовал ниже, отображает только «Введите PIN», и когда я нажимаю «Enter», программа завершает работу.Не могли бы вы сказать мне, в чем заключается ошибка, которую я сделал здесь?

BufferedReader getIt = new BufferedReader(new InputStreamReader(System.in));
String userPIN = "";
try {
    // Open the file that is the first command line parameter
    FileInputStream fstream = new FileInputStream(
        "D:\\Studies\\BCAS\\HND\\Semester 1\\Programming Concepts\\Assignment\\AccountInfo.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    //Read File Line By Line
    System.out.println("Enter PIN");
    userPIN = getIt.readLine();

    while ((strLine = br.readLine()) != null) {
        // Print the content on the console#    
        if (userPIN.equals(strLine)) {
            System.out.println("You have login!");
        }
    }
    //Close the input stream
    in.close();
} catch (Exception e) {//Catch exception if any
    System.err.println("Error: " + e.getMessage());
}

Ответы [ 2 ]

2 голосов
/ 06 сентября 2010

Существует довольно много причин, по которым программа может просто завершиться или, по-видимому, успешно выполнить программу (и, следовательно, успешно завершить ее, не выполняя никакой полезной работы):

  • Содержимое файла читается, но если достигнут конец потока, тогда код просто не обрабатывает случай изящно (или даже не рассматривает его обработку). В частности, строка while ((strLine = br.readLine()) != null) может привести к сценарию, в котором тело цикла не выполняется.
  • Условие else отсутствует внутри тела цикла while. Если ни одна из записей, предоставленных пользовательским вводом, не соответствует содержимому файла, код не обрабатывает условие, и результат является неоднозначным. Для всех практических целей кажется, что вход в систему успешен, если предоставленный PIN-код отсутствует в файле.
  • Избегайте ненужных украшений Reader с и Stream с. BufferedReader in = new BufferedReader(new FileReader("foo.in")); достаточно для чтения символьных данных из файлов, и он предоставляет методы read и readline для использования.

PS: рекомендуется научиться программировать с защитой , особенно при работе с файлами и потоками. Это поможет выделить случаи в вашем коде, которые приведут к двусмысленным / расплывчатым условиям.

0 голосов
/ 06 сентября 2010

File.ReadAllLines было бы более удобно в вашем случае. Не было бы неправильно вводить класс user, если вы идете хорошим путем.

Если вы хотите сделать это самостоятельно, StreamReader (что занимает FileInfo) - это хороший путь. Попробуйте создать его с помощью оператора using (:)), который очищает после того, как вы сделали.

...