Почему 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 — задача, которая встречается постоянно: собрать курсы валют, цены конкурентов, новости или расписание.