diff --git a/README.md b/README.md index e69de29..bd04703 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,197 @@ +# Утилита фильтрации содержимого файлов + +Утилита для разделения содержимого файлов по типам данных (целые числа, вещественные числа, строки). + +## Требования + +- **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. diff --git a/task.pdf b/task.pdf new file mode 100644 index 0000000..c847372 Binary files /dev/null and b/task.pdf differ