Чтение из файла с помощью сканера, построчно и создание объекта из данных - PullRequest
0 голосов
/ 18 мая 2019

Мне поручено читать строку файла построчно с помощью сканера и создавать объекты Student из каждой строки.

Это макет текстового файла:

id,first_name,last_name,username,password,UserType,permission,course,degree
35,Bartholom,Sapsedidiy,wbeeseb3,Q8yPvK4qm,Student,Reserve,EngineerI,Legal

Я сделалубедитесь, что каждый атрибут входит в только что созданный объект ученика в правильном порядке.

Я пытаюсь получить каждую следующую строку или целое число после каждой запятой и назначить его соответствующему атрибуту, который это:

try
    {
        input = new Scanner(Paths.get("C:\\Users\\Home\\Desktop\\Student.txt"));
        input.useDelimiter(",");

        while(input.hasNext()) {
            int id = input.nextInt();
            String firstName = input.next();
            String lastName = input.next();
            String userName = input.next();
            String passWord = input.next();
            String type = input.next();
            enumUserType userType = enumUserType.valueOf(type.toUpperCase());
            String permission = input.next();
            enumPermissionType permissionType = enumPermissionType.valueOf(permission.toUpperCase());
            String course = input.next();
            String degree = input.next();

            Address userAddress = new Address(1, 23, "Fake street", "Suburb1", 2500, enumState.NSW);
            User user = new Student(id, firstName, lastName, userName, passWord, userType, permissionType, true, course, degree, userAddress);
            getLibrary().addUser(user);

        }
    }
    catch(IOException io)
    {
        System.out.println("Error opening file");
    }

Дело в том, что сразу я получаю исключение несоответствия входных данных для int id, который является первым значением чтения, я не уверен, что здесь происходит не так, и мне нужна помощь, чтобы исправить эту ошибку,

Я только новичок в обучении чтению / записи файлов.Может быть, у меня что-то не в том порядке или что-то неправильно читается?

Заранее спасибо!

edit: мое сообщение об ошибке:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at library.Library.initData(Library.java:262)
at library.Library.main(Library.java:225)

Строка 262: int id = input.nextInt ();

1 Ответ

1 голос
/ 18 мая 2019

Попробуйте это -

try
    {
        input = new Scanner(Paths.get("C:\\Users\\Home\\Desktop\\Student.txt"));
        while(input.hasNextLine()) {
            String[] line = input.nextLine().split(",");
            int id = Integer.parseInt(line[0]);
            String firstName = line[1];
            String lastName = line[2];
            String userName = line[3];
            String passWord = line[4];
            String type = line[5];
            enumUserType userType = enumUserType.valueOf(type.toUpperCase());
            String permission = line[6];
            enumPermissionType permissionType = enumPermissionType.valueOf(permission.toUpperCase());
            String course = line[7];
            String degree = line[8];

            Address userAddress = new Address(1, 23, "Fake street", "Suburb1", 2500, enumState.NSW);
            User user = new Student(id, firstName, lastName, userName, passWord, userType, permissionType, true, course, degree, userAddress);
            getLibrary().addUser(user);

        }
    }
    catch(IOException io)
    {
        System.out.println("Error opening file");
    }

Кроме того, это также может быть достигнуто с помощью сканера.

try
    {
        input = new Scanner(Paths.get("C:\\Users\\Home\\Desktop\\Student.txt"));
        while(input.hasNextLine()) {
            Scanner line = new Scanner(input.nextLine());
            line.useDelimiter(",");
            int id = line.nextInt();
            String firstName = line.next();
            String lastName = line.next();
            String userName = line.next();
            String passWord = line.next();
            String type = line.next();
            enumUserType userType = enumUserType.valueOf(type.toUpperCase());
            String permission = line.next();
            enumPermissionType permissionType = enumPermissionType.valueOf(permission.toUpperCase());
            String course = line.next();
            String degree = line.next();

            Address userAddress = new Address(1, 23, "Fake street", "Suburb1", 2500, enumState.NSW);
            User user = new Student(id, firstName, lastName, userName, passWord, userType, permissionType, true, course, degree, userAddress);
            getLibrary().addUser(user);

        }
    }
    catch(IOException io)
    {
        System.out.println("Error opening file");
    }

Но предыдущий был моим любимым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...