Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80

Exception and ReadFile

15.01.2022, 16:37. Показов 3261. Ответов 31
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте! Помогите с заданием, по тому что почти нечего не понятно пока, кроме очевидных вещей....

Реализовать data mapping из текстового файла на java класс.
(файл есть(.csv) с именами, id, role и так далее...)

1|Oleksiy Ivanov|oivanov@gmail.com|1111|QA
2|Ivan Ivanov|iivanov@mail.com|1234|Developer

1) Entity - User, с полями id, username, email, password, role (Роль должна быть в виде enum)
2) interface DataMapper :
User findUserById(int id);
User findUserByUsername(String userName);
User findUserByEmail(String email);
List<User> findUsersByIds(List<Integer> ids)
3) FileDataMapper класс, который имплементирует интерфейс DataMapper
4) UserNotFoundException

Также реализовать свой Exception и кидать его, если не было найдено ничего по поиску.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2022, 16:37
Ответы с готовыми решениями:

First chance exception at $646E6970. Exception class $C0000005 with message access violation at 0x646e6970
Перешёл с XE6 на Delphi 10.3 после чего проект перестал запускаться, выдавая ошибку - First chance exception at $646E6970. Exception...

Unhandled exception at at 0x75E717D2 in ConsoleApplication24.exe: Microsoft C++ exception: std::out_of_range at memory l
Здравствуйте, помогите пожалуйста, при проходе через последний цикл выдаёт вот такую ошибку: Unhandled exception at at 0x75E717D2 in...

Unhandled exception at 0x7c812a5b : Microsoft C++ exception: std::bad_alloc at memory location 0x0012f350
что то я запутался совсем. подскажите где глюк? Считываю из XML данные: char* ValueVariable(длинная символьная строка) пытаюсь ее...

31
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
16.01.2022, 00:33
Petr Kracovis, Что конкретно не получается?

Например так можно прочитать данные из csv файла:
Java
1
2
3
4
5
6
List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("users.csv"));) {
    while (scanner.hasNextLine()) {
        records.add(getRecordFromLine(scanner.nextLine()));
    }
}
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
16.01.2022, 11:21  [ТС]
Не могу понять, стоит ли и как переопределить методы с интерфейса DataMapper, ну типа возвращает ли что-то и если возвращает то что:

User findUserById(int id);
User findUserByUsername(String userName);
User findUserByEmail(String email);
List<User> findUsersByIds(List<Integer> ids)
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
16.01.2022, 13:53
Petr Kracovis, Да, стоит и вполне реально их имплементировать.
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
16.01.2022, 22:20  [ТС]
А какую реализацию методов делать, и что они буду возвращать, по тому что не пойму...
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.01.2022, 09:52
Лучший ответ Сообщение было отмечено Petr Kracovis как решение

Решение

Цитата Сообщение от Petr Kracovis Посмотреть сообщение
что они буду возвращать
Из сигнатуры метода прекрасно видно что они должны возвращать.
Цитата Сообщение от Petr Kracovis Посмотреть сообщение
А какую реализацию методов делать
Очевидно, согласно сигнатуры.
Цитата Сообщение от Petr Kracovis Посмотреть сообщение
User findUserById(int id);
Возвращается объект класса User, у которого поле id соответствует аргументу метода.
Java
1
2
3
4
5
6
    User findUserById(int id) throws UserNotFoundException {
        for(User u: users){
            if (u.id == id) return u;
        }
        throw new UserNotFoundException();
    }
Все остальные методы так же
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
17.01.2022, 18:09
Лучший ответ Сообщение было отмечено Petr Kracovis как решение

Решение

Цитата Сообщение от Petr Kracovis Посмотреть сообщение
А какую реализацию методов делать, и что они буду возвращать, по тому что не пойму...
По сути, тебе нужно будет создать репозиторий на базе списка, который будет инициализироваться данными из csv файла. Т.е. читаешь этот файл построчно, для каждой строки создаешь объект User, инициализируешь его данными из этой строки и добавляешь его в список.

После имплементурий методы используя этот список, например так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    List<User> users = <your_csv_repo>.getUsers();
 
    @Override
    public User findUserById(int id) {
        return users.stream()
                .filter(u -> u.getId() == id)
                .findFirst()
                .orElseThrow(UserNotFoundException::new);
    }
 
    @Override
    public User findUserByUsername(String userName) {
        return users.stream()
                .filter(u -> u.getUserName().equals(userName))
                .findFirst()
                .orElseThrow(UserNotFoundException::new);
    }
 
    @Override
    public User findUserByEmail(String email) {
        return users.stream()
                .filter(u -> u.getEmail().equals(email))
                .findFirst()
                .orElseThrow(UserNotFoundException::new);
    }
 
    @Override
    public List<User> findUsersByIds(List<Integer> ids) {
        return ids.stream()
                .map(this::findUserById)
                .collect(Collectors.toList());
    }
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
17.01.2022, 20:52  [ТС]
Понял, спасибо за ответы буду разбираться дальше!
И еще один вопрос:
Enum создал с ролями, но как реализовать эти роли здесь,ну чтоб,допустим, при вводе отображало то что нужно в реализации с id и ролями и прочее?
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
19.01.2022, 16:41  [ТС]
Со всем разобрался, но такой еще вопрос, как public List<User> findUsersByIds(List<Integer> ids) {
применить в реализации?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.01.2022, 20:37
Java
1
2
3
    public List<User> findUsersByIds(List<Integer> ids) {
        return users.stream().filter(x->ids.contains(x.getId())).collect(Collectors.toList());
    }
1
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
19.01.2022, 23:17  [ТС]
Спасибо,но я про то,как этим методом прочитать строку с файла в самой реализации.
В Смысле как сделать так, что бы возвращал юзера со всеми полями
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
19.01.2022, 23:21
Petr Kracovis, Метод должен работать со слоем репозитория, т.е. списком. В приведенном выше примере - это объект users.

Цитата Сообщение от Hamster83 Посмотреть сообщение
тебе нужно будет создать репозиторий на базе списка, который будет инициализироваться данными из csv файла. Т.е. читаешь этот файл построчно, для каждой строки создаешь объект User, инициализируешь его данными из этой строки и добавляешь его [созданный объект Users] в список.
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
19.01.2022, 23:26  [ТС]
Это по через id я вызываю Юзера
Java
1
2
FileDataMapper file = new FileDataMapper();
        System.out.println("Username: " + file.findUserById(1).getUsername());
Добавлено через 2 минуты
А как сделать, чтобы можно было вывести всю строку с файла
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
19.01.2022, 23:27
FileDataMapper должен содержать поле List<Users> users, инициализацию которого можно будет вызвать в конструкторе.

Цитата Сообщение от Hamster83 Посмотреть сообщение
Например так можно прочитать данные из csv файла:

Java
1
2
3
4
5
6
List<List<String>> records = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("users.csv"));) {
    while (scanner.hasNextLine()) {
        records.add(getRecordFromLine(scanner.nextLine()));
    }
}
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
19.01.2022, 23:27  [ТС]
Вывод:

User name: Oleksiy Ivanov
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
19.01.2022, 23:40
Petr Kracovis, Если запрашиваемый пользователь существует, репозиторий тебе вернет его, у него и вызывай геттер(ы).
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
20.01.2022, 00:21  [ТС]
метод есть, он сделан
как теперь через public List<User> findUsersByIds(List<Integer> ids) !уже в реализации!
вызвать всю строку, что бы выводило все что есть за этим id

1|Oleksiy Ivanov|oivanov@gmail.com|1111|QA

Это уже сделано через методы
Java
1
2
3
4
5
6
7
8
9
User findUserById(int id); User findUserByUsername(String userName); User findUserByEmail(String email);
 
FileDataMapper file = new FileDataMapper();
 
        System.out.println("ID: " + file.findUserById(1).getId());
        System.out.println("UserName: " + file.findUserById(1).getUsername());
        System.out.println("Email: " + file.findUserById(1).getEmail());
        System.out.println("Password: " + file.findUserById(1).getPassword());
        System.out.println(file.findUserById(1).getRole());
Вывод:

ID: 1
UserName: Oleksiy Ivanov
Email: oivanov@gmail.com
Password: 1111
Role: QA

Нужно создавать LIst в самой реализации класса?
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
20.01.2022, 00:38
Переопредели у User метод toString(), в котором в нужном виде опиши его строковое представление, что-то типа: return {"id: " + id + ", usename: " + username ... }. После пройдись по результатам вызова метода findUsersByIds(List<Integer> ids) форичем, на каждой итерации которого передавай на печать очередной элемент.

Цитата Сообщение от Petr Kracovis Посмотреть сообщение
System.out.println("ID: " + file.findUserById(1).getId());
System.out.println("UserName: " + file.findUserById(1).getUsername());
System.out.println("Email: " + file.findUserById(1).getEmail());
System.out.println("Password: " + file.findUserById(1).getPassword());
System.out.println(file.findUserById(1). getRole());
И еще, данный подход не оптимален, также противоречит принципам чистого кода, достаточно один раз дернуть пользователя и потом вызывать его методы.
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 80
20.01.2022, 01:09  [ТС]
Java
1
2
3
4
5
6
7
8
@Override
    public List<User> findUsersByIds(List<Integer> ids) {
        List<User> users = new ArrayList<>();
        for (Integer byId : ids) {
            users.add(findUserById(byId));
        }
        return users;
    }
Так получилось у меня, а toString делал, но не помогло
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
20.01.2022, 13:47
Лучший ответ Сообщение было отмечено Petr Kracovis как решение

Решение

Petr Kracovis,
Java
1
2
3
4
for (User user : findUsersByIds(List.of(1, 3, 5))) {
    // Здесь будет распечатан каждый найденный пользователь согласно реализации метода toString()
    System.out.println(user);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2022, 13:47
Помогаю со студенческими работами здесь

First chance exception at $77ADB09E. Exception class EAccessViolation with message 'Access Violation'. Process
Объясните в каких случаях возникает эта ошибка, из-за чего? Как справиться с этой ошибкой? Только плиз на примере и доступными словами, т....

Ошибка: First chance exception at $FEEEFEEE. Exception class $C0000005 with message 'access violation at 0xfeeefeee:
Здравствуйте! Подскажите пожалуйста, из-за чего может возникнуть такая ошибка?: First chance exception at $FEEEFEEE. Exception class...

Ошибка First chance exception at $75A6D36F. Exception class EAccessViolation.
на что программа ругается не пойму((( подскажите вот такая ошибка First chance exception at $75A6D36F. Exception class EAccessViolation...

Database Exception – yii\db\Exception ↵ Caused by: PDOException
&quot;Database Exception – yii\db\Exception Caused by: PDOException&quot; Помогите , пожалуйста, разобраться откуда пляшет эта ошибка? ...

Database Exception – yii\db\Exception ↵ Caused by: PDOException
Database Exception – yii\db\Exception ↵ Caused by: PDOException Отчего это может быть? Добавлено через 49 минут Это на строчке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru