Как читать текстовый файл с помощью сканера - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь прочитать текст из файла и сравнить его с пользовательским вводом. Но когда я запускаю его, я могу получить сообщение об ошибке. Я не знаю, что не так, любая помощь будет оценена по достоинству!

Исключение в потоке "main" java .lang.IllegalStateException: Сканер закрыт при java .base / java .util .Scanner.ensureOpen (Scanner. java: 1150) в java .base / java .util.Scanner.next (Scanner. java: 1573) в java .base / java .util .Scanner.nextInt (Сканер. java: 2258) в java .base / java .util.Scanner.nextInt (Сканер. java: 2212) в test123.main (test123. java: 32 )

import java.util.Scanner;
import java.io.*;

public class test123 {
    public static void main(String[] args) throws IOException {
        Scanner sc1 = new Scanner(System.in);

        System.out.println("Please enter correct credentials to log in");
        System.out.println("Username: ");
        System.out.println("Password: ");
        String userName = sc1.nextLine();
        String passWord = sc1.nextLine();

        File inFile = new File("employee.txt");

        Scanner sc = new Scanner(inFile);
        String uName = sc.nextLine();
        String pWord = sc.nextLine();

        sc.close();

        if (userName.equals(uName) && passWord.equals(pWord)) {
            System.out.println("Welcome " + userName + "!");
            System.out.println("Menu: ");
            System.out.println("\t1) Account");
            System.out.println("\t2) Payroll");
            System.out.println("\t3) Attendance Report");
            System.out.println("\t4) Service Desk");
            int answer = sc.nextInt();

            switch (answer) {

            case 1:
                System.out.print("Welcome to Account!");
                break;
            case 2:
                System.out.print("Welcome to Payroll!");
                break;
            case 3:
                System.out.print("Welcome to Attendance Report!");
                break;
            case 4:
                System.out.print("Welcome to Service Desk!");
                break;
            default:
                System.out.print("Enter correct menu option");
            }
        } else {
            System.out.println("Sorry, you entered invalid credentials. Try again. ");
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Вы закрываете его:

sc.close();

и затем пытаетесь прочитать с него:

   if(userName.equals(uName) && passWord.equals(pWord)) 
      {
          System.out.println("Welcome " + userName + "!");
          System.out.println("Menu: ");
          System.out.println("\t1) Account");
          System.out.println("\t2) Payroll");
          System.out.println("\t3) Attendance Report");
          System.out.println("\t4) Service Desk");
          int answer = sc.nextInt(); //here



           switch (answer)  {

              case 1:
                  System.out.print("Welcome to Account!");
                  break;
              case 2:
                  System.out.print("Welcome to Payroll!");
                  break;
              case 3:
                  System.out.print("Welcome to Attendance Report!");
                  break;
              case 4:
                  System.out.print("Welcome to Service Desk!");
                  break;
              default:
                  System.out.print("Enter correct menu option");
       }
   }

        else 
      {
          System.out.println("Sorry, you entered invalid credentials. Try again. ");
     }
0 голосов
/ 28 февраля 2020

Поставьте sc.close() в конце, как показано ниже:

        ...
        ...
        ...
        sc.close();
    }
}

Ошибка, которую вы получаете, заключается в том, что вы пытаетесь выполнить sc.nextInt(), когда sc.close() уже завершил выполнение, закрывая Scanner объект.

...