2026-01-17 19:32:22 +03:00
upd
2026-01-17 19:32:22 +03:00
upd
2026-01-17 19:32:22 +03:00

Утилита фильтрации содержимого файлов

Утилита для разделения содержимого файлов по типам данных (целые числа, вещественные числа, строки).

Требования

  • Java: версия 11 или выше
  • Maven: версия 3.6.0 или выше (для сборки)

Используемые библиотеки

Структура проекта

file-filter-utility/
├── pom.xml
├── README.md
└── 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)

  • Для чисел: количество, минимум, максимум, сумма, среднее
  • Для строк: количество, длина самой короткой строки, длина самой длинной строки

Особенности реализации

  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

Запуск:

java -jar target/file-filter.jar -s -a -p sample- in1.txt in2.txt

Лицензия

Проект создан в качестве тестового задания.

Автор

Тестовое задание для курса Java.

Description
No description provided
Readme 137 KiB
Languages
Java 100%