upd
This commit is contained in:
197
README.md
197
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.
|
||||
|
||||
Reference in New Issue
Block a user