Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

File Filter Utility

Консольная утилита на Java для фильтрации содержимого файлов. Программа читает строки из входных файлов, классифицирует их по типу данных и записывает в отдельные выходные файлы, собирая статистику.

Описание

Утилита принимает несколько входных файлов, содержащих:

  • целые числа
  • вещественные числа
  • строки

Каждая строка классифицируется и записывается в соответствующий файл:

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

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

Дополнительно программа собирает статистику и выводит её в консоль.


Возможности

  • Фильтрация данных по типу
  • Поддержка больших чисел (BigInteger, BigDecimal)
  • Краткая и полная статистика
  • Настраиваемый путь вывода
  • Префиксы для выходных файлов
  • Режим добавления в существующие файлы
  • Обработка ошибок без падения программы
  • Чистая модульная архитектура

Технологии

  • Java: 17+
  • Сборка: Maven / Gradle / стандартный javac
  • Сторонние библиотеки: не используются

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

ru.shift.filter
├── Main.java              # Точка входа
├── cli/                   # Парсинг аргументов командной строки
│   ├── CliParser.java
│   └── CliArgs.java
├── core/                  # Основная логика обработки
│   ├── Processor.java
│   ├── OutputManager.java
│   ├── LineClassifier.java
│   └── DataType.java
└── stats/                 # Сбор статистики
    ├── NumberStats.java
    ├── StringStats.java
    └── StatsMode.java

Запуск

Перед запуском создайте входные файлы (например, in1.txt, in2.txt) в корне проекта.

Способ 1. Запуск через javac (без системы сборки)

Компиляция:

Windows (PowerShell):

javac -d out (Get-ChildItem -Recurse src\main\java\*.java | % FullName)

macOS / Linux:

javac -d out $(find src/main/java -name "*.java")

Запуск:

java -cp out ru.shift.filter.Main [опции] <input files>

Пример:

java -cp out ru.shift.filter.Main -s -a -p sample- in1.txt in2.txt

Способ 2. Запуск через Maven

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

mvn clean package

После сборки будет создан файл:

target/shift-filter-1.0.0.jar

Запуск:

java -jar target/shift-filter-1.0.0.jar [опции] <input files>

Пример:

java -jar target/shift-filter-1.0.0.jar -s -a -p sample- in1.txt in2.txt

Альтернативный запуск через classpath:

java -cp target/classes ru.shift.filter.Main [опции] <input files>

Способ 3. Запуск через Gradle

Сборка:

./gradlew clean build

После сборки будет создан файл:

build/libs/file-filter-1.0.0.jar

Запуск:

java -jar build/libs/file-filter-1.0.0.jar [опции] <input files>

Способ 4. Запуск через IntelliJ IDEA

  1. Откройте класс Main.java
  2. Нажмите Run рядом с методом main
  3. В настройках конфигурации добавьте аргументы программы:
-s -a -p sample- in1.txt in2.txt

Аргументы командной строки

Опция Описание
-o <path> Путь к директории выходных файлов
-p <prefix> Префикс имен выходных файлов
-a Режим добавления в существующие файлы
-s Краткая статистика
-f Полная статистика
<files> Входные файлы

Опции -s и -f взаимоисключающие.


Статистика

Краткая статистика

  • количество элементов

Полная статистика

Для чисел:

  • количество
  • минимум
  • максимум
  • сумма
  • среднее значение

Для строк:

  • количество
  • длина самой короткой строки
  • длина самой длинной строки

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

По умолчанию:

integers.txt
floats.txt
strings.txt

Пример с опциями:

-o /tmp/output -p result_

Результат:

/tmp/output/result_integers.txt
/tmp/output/result_floats.txt
/tmp/output/result_strings.txt

Обработка ошибок

Программа:

  • корректно обрабатывает ошибки чтения файлов
  • не завершается аварийно при частичных ошибках
  • выводит понятные сообщения в консоль
  • продолжает обработку при возможности

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

  • Используется потоковая обработка файлов
  • Статистика собирается во время записи
  • Выходные файлы создаются лениво (по необходимости)
  • Поддерживается UTF-8
  • Используются BigInteger и BigDecimal для точности

Соответствие заданию

Реализация полностью покрывает требования тестового задания:

  • фильтрация типов данных
  • раздельные файлы вывода
  • настройка пути и префиксов
  • режим append
  • два режима статистики
  • обработка ошибок
  • чистый код и модульная архитектура

Тестовое задание по курсу Java.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages