Автоматизация на Java: 5 реальных примеров для работы и учёбы

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Почему Java — идеальный инструмент для автоматизации?

Вы когда-нибудь тратили полдня на то, чтобы переименовать 200 файлов в папке? Или вручную копировали данные из десятка Excel-таблиц в отчёт? Знакомо? Тогда эта статья для вас.

Java — это не только язык для огромных корпоративных систем. Это мощный, стабильный и кроссплатформенный инструмент, который отлично подходит для автоматизации рутинных задач. В отличие от скриптовых языков, Java-программы работают быстро, их легко поддерживать, а огромная экосистема библиотек (Maven Central) позволяет решить практически любую задачу «из коробки».

В этой статье мы не будем говорить о теории. Мы разберём 5 реальных сценариев автоматизации на Java с готовым кодом, который вы сможете скопировать и адаптировать под свои нужды. Поехали!

1. Автоматизация работы с файловой системой (переименование, сортировка, очистка)

Самая частая задача — навести порядок в файлах. Представьте: у вас есть папка с отчётами вида report_2024_01_15.xlsx, report_2024_01_16.xlsx и так далее. Вам нужно перенести их по папкам по месяцам. Руками — это 15 минут. Java — 2 секунды.

Пример: Автоматическая сортировка файлов по дате

import java.io.IOException;
import java.nio.file.*;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileSorter {
    public static void main(String[] args) throws IOException {
        Path sourceDir = Paths.get("C:/reports");
        Pattern pattern = Pattern.compile("report_(\\d{4})_(\\d{2})_(\\d{2})\\.xlsx");

        try (DirectoryStream<Path> stream = Files.newDirectoryStream(sourceDir, "*.xlsx")) {
            for (Path file : stream) {
                Matcher matcher = pattern.matcher(file.getFileName().toString());
                if (matcher.matches()) {
                    String year = matcher.group(1);
                    String month = matcher.group(2);
                    Path targetDir = sourceDir.resolve(year).resolve(month);
                    Files.createDirectories(targetDir);
                    Files.move(file, targetDir.resolve(file.getFileName()), StandardCopyOption.REPLACE_EXISTING);
                    System.out.println("Перемещён: " + file.getFileName());
                }
            }
        }
        System.out.println("Готово! Файлы рассортированы по папкам.");
    }
}

Что делает этот код? Он сканирует папку, находит все файлы, подходящие под шаблон, извлекает из имени год и месяц, создаёт вложенные папки и перемещает файлы. Всё просто и надёжно.

Вы можете легко адаптировать этот код под свои нужды: изменить паттерн, добавить логирование или сделать рекурсивный обход подпапок. Это база для любой автоматизации задач на Java, связанной с файлами.

2. Парсинг и обработка Excel-файлов (Apache POI)

Excel — это «любимый» инструмент бухгалтеров, менеджеров и аналитиков. И часто вам нужно собрать данные из 10 файлов в один, или наоборот — разбить один большой файл на несколько. Библиотека Apache POI — стандарт де-факто для работы с Excel в Java.

Пример: Чтение данных из Excel и генерация сводного отчёта

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ExcelAggregator {
    public static void main(String[] args) throws IOException {
        Map<String, Double> summary = new HashMap<>();

        // Читаем три файла
        String[] files = {"sales_q1.xlsx", "sales_q2.xlsx", "sales_q3.xlsx"};
        for (String fileName : files) {
            try (FileInputStream fis = new FileInputStream(fileName);
                 Workbook workbook = new XSSFWorkbook(fis)) {
                Sheet sheet = workbook.getSheetAt(0);
                for (Row row : sheet) {
                    if (row.getRowNum() == 0) continue; // Пропускаем заголовок
                    String product = row.getCell(0).getStringCellValue();
                    double amount = row.getCell(1).getNumericCellValue();
                    summary.merge(product, amount, Double::sum);
                }
            }
        }

        // Записываем сводный отчёт
        try (Workbook outWorkbook = new XSSFWorkbook();
             FileOutputStream fos = new FileOutputStream("summary.xlsx")) {
            Sheet outSheet = outWorkbook.createSheet("Сводка");
            int rowNum = 0;
            for (Map.Entry<String, Double> entry : summary.entrySet()) {
                Row row = outSheet.createRow(rowNum++);
                row.createCell(0).setCellValue(entry.getKey());
                row.createCell(1).setCellValue(entry.getValue());
            }
            outWorkbook.write(fos);
        }
        System.out.println("Сводный отчёт создан: summary.xlsx");
    }
}

Важно: Для работы с этим кодом добавьте в pom.xml зависимость org.apache.poi:poi-ooxml:5.2.5. Этот пример — классика Java автоматизации офисных задач. Вы можете легко расширить его: добавить форматирование, графики или фильтры.

3. Отправка email-уведомлений (JavaMail)

Автоматизация не имеет смысла, если вы не знаете о результате. Отправка email — базовая, но крайне полезная задача. Например, вы запускаете ночной скрипт обработки данных, и хотите получить уведомление об успехе или ошибке.

Пример: Отправка простого письма через SMTP Gmail

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class EmailSender {
    public static void main(String[] args) {
        final String username = "your_email@gmail.com";
        final String password = "your_app_password"; // Используйте пароль приложения!

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com"));
            message.setSubject("Автоматическое уведомление: задача выполнена");
            message.setText("Привет! Обработка данных завершена успешно. Файл отчёта приложен к письму.");

            Transport.send(message);
            System.out.println("Письмо отправлено!");
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

Совет: Для Gmail используйте «пароль приложения», а не основной пароль. Это безопаснее. Встройте этот код в любой ваш Java проект по автоматизации, и вы всегда будете в курсе событий.

4. Автоматизация сбора данных с веб-страниц (Jsoup)

Парсинг HTML — задача, которая встречается постоянно: собрать курсы валют, цены конкурентов, новости или расписание.

Блоги

Рекомендаций по книгам