Утилита фильтрации содержимого файлов
Утилита для разделения содержимого файлов по типам данных (целые числа, вещественные числа, строки).
Требования
- 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
└── src/
└── main/
└── java/
└── com/
└── filefilter/
├── FileFilterApp.java
├── Statistics.java
└── FileWriterManager.java
Сборка проекта
С помощью Maven
mvn clean package
После успешной сборки в директории target/ будет создан файл file-filter.jar.
Запуск
Базовый запуск
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: Базовая обработка с краткой статистикой
java -jar target/file-filter.jar -s in1.txt in2.txt
Пример 2: С префиксом и режимом добавления
java -jar target/file-filter.jar -s -a -p sample- in1.txt in2.txt
Результат: файлы sample-integers.txt, sample-floats.txt, sample-strings.txt
Пример 3: С указанием пути и полной статистикой
java -jar target/file-filter.jar -f -o /path/to/output -p result_ in1.txt in2.txt
Результат: файлы в /path/to/output/result_integers.txt, и т.д.
Пример 4: Только полная статистика
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)
- Для чисел: количество, минимум, максимум, сумма, среднее
- Для строк: количество, длина самой короткой строки, длина самой длинной строки
Особенности реализации
-
Определение типов данных:
- Сначала проверяется, является ли строка целым числом (
Long) - Затем проверяется, является ли вещественным числом (
Double) - Если оба парсинга неудачны - считается строкой
- Сначала проверяется, является ли строка целым числом (
-
Обработка ошибок:
- Программа не прерывается при ошибках чтения отдельных файлов
- Недоступные файлы пропускаются с выводом предупреждения
- Ошибки записи логируются, обработка продолжается
-
Создание файлов:
- Выходные файлы создаются только при наличии данных соответствующего типа
- Если во входных файлах нет целых чисел,
integers.txtне создается
-
Кодировка:
- Все файлы читаются и записываются в кодировке 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
Запуск:
java -jar target/file-filter.jar -s -a -p sample- in1.txt in2.txt
Лицензия
Проект создан в качестве тестового задания.
Автор
Тестовое задание для курса Java.