Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

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