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