Файловые системы, шаблон лабораторной и CSV-формат

Файловые системы и шаблон сдачи #

Файловые системы #

Презентацию по теме можно посмотреть по ссылке

Видео-запись: Rutube

Шаблон лабораторной работы #

Презентацию по теме можно посмотреть по ссылке

Видео-запись: Rutube

Шаблон лабораторной работы можно скачать по ссылке

CSV-документы #

Презентацию по теме можно посмотреть по ссылке

Видео-запись: Rutube

Документация по теме #

Задание № 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:

Проверьте себя: после загрузки хранилище должно содержать столько же треугольников, сколько строк с данными в файле. Выведите список, полученный функцией 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.

© A. M. Васильев, 2026, CC BY-SA 4.0, andrey@crafted.su