198 lines
6.9 KiB
Markdown
198 lines
6.9 KiB
Markdown
# Утилита фильтрации содержимого файлов
|
||
|
||
Утилита для разделения содержимого файлов по типам данных (целые числа, вещественные числа, строки).
|
||
|
||
## Требования
|
||
|
||
- **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.
|