Files
shift-intern/README.md
2026-01-17 19:32:22 +03:00

198 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Утилита фильтрации содержимого файлов
Утилита для разделения содержимого файлов по типам данных (целые числа, вещественные числа, строки).
## Требования
- **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.