Консольная утилита на 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) в корне проекта.
Компиляция:
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Сборка проекта:
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>Сборка:
./gradlew clean buildПосле сборки будет создан файл:
build/libs/file-filter-1.0.0.jar
Запуск:
java -jar build/libs/file-filter-1.0.0.jar [опции] <input files>- Откройте класс
Main.java - Нажмите Run рядом с методом
main - В настройках конфигурации добавьте аргументы программы:
-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.