# Утилита фильтрации содержимого файлов Утилита для разделения содержимого файлов по типам данных (целые числа, вещественные числа, строки). ## Требования - **Java**: версия 11 или выше - **Maven**: версия 3.6.0 или выше (для сборки) ## Используемые библиотеки - **Picocli** версия 4.7.5 - библиотека для парсинга аргументов командной строки - Сайт: https://picocli.info/ - Maven Central: https://mvnrepository.com/artifact/info.picocli/picocli/4.7.5 ## Структура проекта ``` file-filter-utility/ ├── pom.xml ├── README.md └── src/ └── main/ └── java/ └── com/ └── filefilter/ ├── FileFilterApp.java ├── Statistics.java └── FileWriterManager.java ``` ## Сборка проекта ### С помощью Maven ```bash mvn clean package ``` После успешной сборки в директории `target/` будет создан файл `file-filter.jar`. ## Запуск ### Базовый запуск ```bash java -jar target/file-filter.jar [опции] <входные_файлы> ``` ### Параметры командной строки | Параметр | Описание | |----------|----------| | `-o, --output <путь>` | Путь для выходных файлов (по умолчанию: текущая директория) | | `-p, --prefix <префикс>` | Префикс имен выходных файлов | | `-a, --append` | Режим добавления в существующие файлы (по умолчанию: перезапись) | | `-s, --short-stats` | Вывести краткую статистику | | `-f, --full-stats` | Вывести полную статистику | | `-h, --help` | Показать справку | | `-V, --version` | Показать версию | ### Выходные файлы По умолчанию создаются следующие файлы: - `integers.txt` - целые числа - `floats.txt` - вещественные числа - `strings.txt` - строки ## Примеры использования ### Пример 1: Базовая обработка с краткой статистикой ```bash java -jar target/file-filter.jar -s in1.txt in2.txt ``` ### Пример 2: С префиксом и режимом добавления ```bash java -jar target/file-filter.jar -s -a -p sample- in1.txt in2.txt ``` Результат: файлы `sample-integers.txt`, `sample-floats.txt`, `sample-strings.txt` ### Пример 3: С указанием пути и полной статистикой ```bash java -jar target/file-filter.jar -f -o /path/to/output -p result_ in1.txt in2.txt ``` Результат: файлы в `/path/to/output/result_integers.txt`, и т.д. ### Пример 4: Только полная статистика ```bash java -jar target/file-filter.jar -f data1.txt data2.txt data3.txt ``` ## Формат входных данных Входные файлы должны содержать данные, разделенные переводом строки: - **Целые числа**: поддерживается диапазон типа `long` (до 19 цифр) - **Вещественные числа**: поддерживается обычная и экспоненциальная форма (например, `3.14`, `1.5E-25`) - **Строки**: все остальное, включая текст на кириллице ### Пример входного файла ``` Lorem ipsum dolor sit amet 45 Пример 3.1415 consectetur adipiscing -0.001 тестовое задание 100500 ``` ## Статистика ### Краткая статистика (`-s`) - Количество элементов каждого типа ### Полная статистика (`-f`) - **Для чисел**: количество, минимум, максимум, сумма, среднее - **Для строк**: количество, длина самой короткой строки, длина самой длинной строки ## Особенности реализации 1. **Определение типов данных**: - Сначала проверяется, является ли строка целым числом (`Long`) - Затем проверяется, является ли вещественным числом (`Double`) - Если оба парсинга неудачны - считается строкой 2. **Обработка ошибок**: - Программа не прерывается при ошибках чтения отдельных файлов - Недоступные файлы пропускаются с выводом предупреждения - Ошибки записи логируются, обработка продолжается 3. **Создание файлов**: - Выходные файлы создаются только при наличии данных соответствующего типа - Если во входных файлах нет целых чисел, `integers.txt` не создается 4. **Кодировка**: - Все файлы читаются и записываются в кодировке UTF-8 - Поддерживается текст на кириллице ## Решение возможных проблем ### Ошибка: "Не удалось создать директорию" Убедитесь, что у вас есть права на запись в указанную директорию. ### Ошибка: "Файл не найден" Проверьте правильность путей к входным файлам. ### Ошибка при сборке Maven Убедитесь, что: - Установлена Java 11 или выше: `java -version` - Установлен Maven: `mvn -version` - Переменная окружения `JAVA_HOME` настроена корректно ## Тестирование Для тестирования можно использовать примеры файлов из задания: **in1.txt**: ``` Lorem ipsum dolor sit amet 45 Пример 3.1415 consectetur adipiscing -0.001 тестовое задание 100500 ``` **in2.txt**: ``` Нормальная форма числа с плавающей запятой 1.528535047E-25 Long 1234567890123456789 ``` Запуск: ```bash java -jar target/file-filter.jar -s -a -p sample- in1.txt in2.txt ``` ## Лицензия Проект создан в качестве тестового задания. ## Автор Тестовое задание для курса Java.