Файловые системы и шаблон сдачи #
Файловые системы #
Презентацию по теме можно посмотреть по ссылке
Видео-запись: Rutube
Шаблон лабораторной работы #
Презентацию по теме можно посмотреть по ссылке
Видео-запись: Rutube
Шаблон лабораторной работы можно скачать по ссылке
CSV-документы #
Презентацию по теме можно посмотреть по ссылке
Видео-запись: Rutube
Документация по теме #
- Класс
java.io.File. - Интерфейс
java.nio.file.Path. - Библиотека kotlin-csv.
UUID.fromString.LocalDateTime.parse.DateTimeFormatter.ISO_LOCAL_DATE_TIME.- Фильтрация коллекций.
exitProcess.
Задание № 1. Использование шаблона лабораторной работы #
Перенесите код приложения для работы с треугольниками из занятия 5 в шаблон лабораторной работы. Для этого:
- Укажите стартовый класс приложения в свойстве
mainClassфайлаbuild.properties.json(разбор файла — в презентации «Шаблон лабораторной работы»). - Запустите приложение задачей Gradle
runи передайте аргументы командного интерфейса:./gradlew run --args="3 4 5 3 3 3 5 3 2".
Убедитесь, что вывод приложения совпадает с выводом из задания № 3 занятия 4:
$ ./gradlew run --args="3 4 5 3 3 3 5 3 2"
5.00 4.00 3.00 — прямоугольный
3.00 3.00 3.00 — остроугольный
5.00 3.00 2.00 — отрезокЗадание № 2. Реализуйте чтение данных о треугольниках из CSV-документа #
-
Путь к файлу с CSV-документом передаётся в качестве первого аргумента командного интерфейса. Получение длин сторон из аргументов (как в занятии 4) больше не используется: исходные данные приложение получает только из файла.
-
Если аргумент не задан или ведёт к несуществующему файлу, приложение должно вывести сообщение об ошибке в стандартный поток вывода и завершить работу с ненулевым кодом возврата
exitProcess(1). Существование файла проверяйте функциейFile.exists(), напримерif (!File(path).exists()) { ... }. -
Чтение данных должно быть реализовано с помощью CSV-библиотеки. Если файл существует, то можно считать, что все данные внутри файла являются корректными.
-
Реализуйте хранение данных о треугольниках в классе
TriangleStorage, который предоставляет функции:class TriangleStorage { fun read(file: File) // считывает данные из CSV-файла fun write(file: File) // записывает данные хранилища в файл fun getAll(): List<Triangle> // возвращает список всех треугольников fun getById(id: UUID): Triangle? // возвращает треугольник по идентификатору }Имена и типы параметров можно изменить, состав функций — нет.
Предлагаемый формат входного файла:
Id,SideA,SideB,SideC,RegistrationDateTime,BorderColor,FillColor,Description
66ade672-2301-4408-9471-8a17aa883d65,1,2,5,2024-08-26T19:01:41.114511727,GREEN,RED,"странные данные, это неправильный треугольник"
a6be5e23-b8d4-4d78-8aa3-1c204d0befc8,2,3,5,2024-07-10T17:26:41.129567382,RED,GREEN,"точки расположены на отрезке"
baa30333-23d6-4eba-a8ed-7c235adf4228,2,3,4,2024-07-27T00:10:41.129642513,RED,GREEN,"обычный треугольник"| Название поля | Описание поля | Тип поля | Тип при загрузке |
|---|---|---|---|
| Id | Уникальный идентификатор | Строка с UUID | UUID |
| SideA | Длина стороны | Строка с вещественным числом (например, 2) |
Double |
| SideB | Длина стороны | Строка с вещественным числом (например, 3.5) |
Double |
| SideC | Длина стороны | Строка с вещественным числом (например, 4) |
Double |
| RegistrationDateTime | Дата регистрации в системе | Строка в формате ISO 8601, например 2024-07-27T00:10:41.129642513 |
LocalDateTime |
| BorderColor | Цвет границы | Имя константы перечисления Color (RED) |
Color |
| FillColor | Цвет заливки | Имя константы перечисления Color (GREEN) |
Color |
| Description | Описание | Текст в кавычках | String |
Дробная часть даты может содержать от нуля до девяти цифр: значение разбирайте
целиком по формату
ISO_LOCAL_DATE_TIME,
отдельно обрезать дробную часть не нужно.
Цвета — это константы перечисления
Color из занятия 5; в файле
записано имя константы, а не русское название.
- Добавьте в класс
Triangleполяid: UUID,registrationDateTime: LocalDateTime,borderColor: Color,fillColor: Colorиdescription: String. Значения всех полей приложение получает из CSV-документа; ввод полей с клавиатуры не требуется. - Преобразуйте строковые значения полей CSV:
- длины сторон — функцией
toDouble(); - идентификатор — функцией
UUID.fromString(); - дату регистрации — функцией
LocalDateTime.parse()с форматомDateTimeFormatter.ISO_LOCAL_DATE_TIME; - цвета — функцией
Color.valueOf()(разобрана в занятии 5).
- длины сторон — функцией
Проверьте себя: после загрузки хранилище должно содержать столько же треугольников,
сколько строк с данными в файле. Выведите список, полученный функцией getAll(), и
убедитесь, что для входного файла из примера печатаются три треугольника.
Задание № 3. Отображение списка треугольников определённого цвета заливки #
Добавьте обработку второго аргумента приложения. В качестве второго аргумента
передаётся имя константы перечисления Color, например RED или GREEN.
Русское название цвета (Красный) вторым аргументом не передаётся.
Если второй аргумент не указан или не совпадает ни с одной константой
перечисления Color, приложение должно вывести сообщение об ошибке и
завершить работу с ненулевым кодом возврата
exitProcess(1).
Для проверки значения используйте Color.entries и разбор без выброса
исключения.
Приложение должно вывести на стандартный поток вывода краткую информацию о
треугольниках, которые имеют указанный цвет заливки. Для каждого подходящего
треугольника выведите одну строку в формате
<id> <текстовое представление треугольника>: сначала уникальный
идентификатор, затем одиночный пробел, затем результат toString()
треугольника. Порядок строк — как в исходном файле.
Пример запуска и вывода для файла из примера и цвета GREEN:
$ ./gradlew run --args="../data/triangles.csv GREEN"
a6be5e23-b8d4-4d78-8aa3-1c204d0befc8 5.00 3.00 2.00
baa30333-23d6-4eba-a8ed-7c235adf4228 4.00 3.00 2.00Если треугольников с указанным цветом заливки нет, приложение выводит пустой список и завершает работу с кодом возврата 0.