Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FilterUtil

Утилита для фильтрации содержимого файлов по типам данных (целые числа, вещественные числа, строки) с возможностью сбора статистики.

Описание

Утилита читает один или несколько входных файлов, содержащих в перемешку целые числа, строки и вещественные числа (разделитель - перевод строки), и записывает разные типы данных в отдельные выходные файлы. Поддерживает сбор краткой и полной статистики по каждому типу данных.

Технические характеристики

  • Язык программирования: Java
  • Версия Java: 25
  • Система сборки: Maven
  • Версия Maven: 4.0.0
  • Кодировка: UTF-8

Особенности реализации

Архитектура

Проект реализован с соблюдением принципов SOLID:

  • Single Responsibility Principle (SRP): Каждый класс отвечает за одну задачу:

    • LineParser - парсинг строк и определение типа данных
    • InputFileReader - чтение файлов
    • OutputWriter - запись результатов
    • StatisticColletor - сбор статистики
    • CommandLineParser - разбор аргументов командной строки
  • Dependency Inversion Principle (DIP): Использование интерфейсов (InputFileReader, OutputWriter, Statistic) позволяет легко заменять реализации

  • Open/Closed Principle (OCP): Расширяемость через интерфейсы без изменения существующего кода

Структура проекта

src/main/java/org/example/
├── config/          # Конфигурация и парсинг аргументов
│   ├── AppConfig.java
│   ├── CommandLineArg.java
│   ├── CommandLineParser.java
│   └── ParseResult.java
├── io/             # Ввод-вывод
│   ├── InputFileReader.java (интерфейс)
│   ├── InputFileReaderImpl.java
│   ├── OutputWriter.java (интерфейс)
│   └── OutputWriterImpl.java
├── model/          # Модели данных
│   └── DataType.java (enum)
├── parser/         # Парсинг строк
│   ├── LineParser.java
│   └── ParsedLine.java (DTO)
├── statistics/     # Статистика
│   ├── Statistic.java (интерфейс)
│   ├── IntegerStatistic.java
│   ├── FloatStatistic.java
│   ├── StringStatistic.java
│   └── StatisticColletor.java
├── FilterService.java  # Оркестрация процесса
└── Main.java          # Точка входа

Ключевые компоненты

  1. LineParser - определяет тип данных (INTEGER, FLOAT, STRING) через последовательную проверку:

    • Сначала пытается распарсить как Long (целое число)
    • Затем как Double (вещественное число, включая научную нотацию)
    • Иначе считает строкой
  2. ParsedLine - DTO (Data Transfer Object) для передачи результата парсинга с типом и значением

  3. StatisticColletor - собирает статистику по каждому типу данных:

    • Краткая статистика: количество элементов
    • Полная статистика: для чисел - min, max, sum, average; для строк - min/max длина
  4. Обработка ошибок: Программа не падает при ошибках чтения/записи файлов, выводит сообщения в stderr и продолжает работу с остальными файлами

Сборка проекта

Требования

  • JDK 25 или выше
  • Maven 3.6+ (или используйте встроенный Maven в IntelliJ IDEA)

Команды сборки

# Компиляция
mvn clean compile

# Сборка JAR
mvn clean package

После сборки JAR файл будет находиться в target/FilterUtil-1.0-SNAPSHOT.jar

Использование

Запуск из командной строки

java -jar target/FilterUtil-1.0-SNAPSHOT.jar [опции] файл1.txt файл2.txt ...

Опции командной строки

  • -o <путь> - путь для выходных файлов (по умолчанию: текущая директория)
  • -p <префикс> - префикс имен выходных файлов (по умолчанию: пустая строка)
  • -a - режим добавления в существующие файлы (по умолчанию: перезапись)
  • -s - краткая статистика (только количество элементов)
  • -f - полная статистика (количество + min/max/sum/average для чисел, min/max длина для строк)

Примеры использования

# Базовый запуск с краткой статистикой
java -jar target/FilterUtil-1.0-SNAPSHOT.jar -s in1.txt in2.txt

# С префиксом и режимом добавления
java -jar target/FilterUtil-1.0-SNAPSHOT.jar -s -a -p sample- in1.txt in2.txt

# Полная статистика с указанием выходной директории
java -jar target/FilterUtil-1.0-SNAPSHOT.jar -f -o /path/to/output -p result_ in1.txt in2.txt

Формат входных файлов

Входные файлы содержат данные в перемешку, разделённые переводом строки:

Lorem ipsum dolor sit amet
45
Пример
3.1415
consectetur adipiscing
-0.001
тестовое задание
100500

Выходные файлы

По умолчанию создаются файлы:

  • integers.txt - целые числа
  • floats.txt - вещественные числа
  • strings.txt - строки

С опцией -p sample- файлы будут называться:

  • sample-integers.txt
  • sample-floats.txt
  • sample-strings.txt

Важно: Файлы создаются только если соответствующий тип данных присутствует во входных файлах.

Пример вывода статистики

Краткая статистика (-s):

Целые числа: 3
Вещественные числа: 3
Строки: 5

Полная статистика (-f):

Целые числа: 3, мин: 45, макс: 1234567890123456789, сумма: 1234567890123557334, среднее: 411522630041185800,00
Вещественные числа: 3, мин: -0.001, макс: 3.1415, сумма: 3.1405000000000003, среднее: 1.0468333333333335
Строки: 5, мин. длина: 4, макс. длина: 26

Запуск из IntelliJ IDEA

  1. Откройте проект в IntelliJ IDEA
  2. Откройте Main.java
  3. Нажмите правой кнопкой мыши → Run 'Main.main()'
  4. Для передачи аргументов: RunEdit Configurations → в поле Program arguments укажите опции и файлы

Пример Program arguments:

-s -a -p sample- in1.txt in2.txt

Примечание: Убедитесь, что входные файлы находятся в рабочей директории проекта (там, где pom.xml), или укажите полные пути к файлам.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages