This commit is contained in:
2026-01-17 19:32:22 +03:00
parent 00a748ae65
commit a7021eee5c
2 changed files with 197 additions and 0 deletions

197
README.md
View File

@@ -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.

BIN
task.pdf Normal file

Binary file not shown.