Java Ready | Программирование
8.9K subscribers
1.22K photos
60 videos
1 file
600 links
Авторский канал по разработке на Java.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Реклама на бирже: https://telega.in/c/java_ready
Download Telegram
Защита от зависаний!

Иногда код может зависнуть, сеть не отвечает, поток завис, задача не заканчивается. Чтобы приложение не висело вечно нужно ставить таймауты и принудительно обрывать долгие задачи.

Запускаем задачу в отдельном потоке:
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<String> task = pool.submit(() -> longWork());


Ждём ограниченное время:
String result = task.get(3, TimeUnit.SECONDS);


Если не успело, отменяем задачу:
task.cancel(true); // пытается прервать поток
pool.shutdownNow();


Так мы защищаемся от вечных зависаний процессов и вечных циклов.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
📂 Напоминалка по IPv4 vs IPv6!

Например, IPv4 использует 32-битные адреса, а IPv6 — 128-битные и поддерживает автоконфигурацию. Также на схеме показано, как работает Dual Stack и чем отличаются заголовки пакетов.

На картинке — ключевые различия IPv4 и IPv6, которые стоит держать под рукой.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍8🔥5
Система учёта задач!

To-Do это идеальная практика для списков, ввода и работы с файлами. Задачи будем хранить в ArrayList, а между запусками сохранять в tasks.txt.

Задаём файл и загружаем задачи, если он уже существует:
var path = java.nio.file.Path.of("tasks.txt");
var tasks = new java.util.ArrayList<String>();

if (java.nio.file.Files.exists(path))
tasks.addAll(java.nio.file.Files.readAllLines(path));


Печатаем меню и читаем команду пользователя:
var sc = new java.util.Scanner(System.in);
boolean run = true;

while (run) {
System.out.println("1) Список 2) Добавить 3) Удалить 0) Выход");
System.out.print("Выбор: ");
var cmd = sc.nextLine().trim();


Выводим текущие задачи с нумерацией:
    if (cmd.equals("1")) {
if (tasks.isEmpty()) System.out.println("Задач нет.");
for (int i = 0; i < tasks.size(); i++)
System.out.println((i + 1) + ") " + tasks.get(i));
}


Добавляем задачу и сразу сохраняем в файл:
    else if (cmd.equals("2")) {
System.out.print("Текст задачи: ");
var t = sc.nextLine();
tasks.add(t);
java.nio.file.Files.write(path, tasks);
System.out.println("Добавлено.");
}


Удаляем задачу по номеру и сохраняем обновлённый список:
    else if (cmd.equals("3")) {
System.out.print("Номер: ");
int n = Integer.parseInt(sc.nextLine());
if (n >= 1 && n <= tasks.size()) {
tasks.remove(n - 1);
java.nio.file.Files.write(path, tasks);
System.out.println("Удалено.");
} else System.out.println("Неверный номер.");
}


Выходим из программы и закрываем ввод:
    else if (cmd.equals("0")) run = false;
else System.out.println("Неизвестная команда.");

System.out.println();
}
sc.close();


В итоге получилась To-Do утилита с сохранением задач в tasks.txt.

👉 Java Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥4
📂 Напоминалка про Modem vs Router!

Модем отвечает за подключение к провайдеру и получение публичного IP, а роутер управляет локальной сетью: маршрутизирует трафик, выполняет NAT и раздаёт адреса устройствам.

На картинке — ключевые отличия и базовая схема работы.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86🔥6
Защита от повторного запуска!

Иногда нельзя, чтобы приложение запускалось дважды. Решение простое, нужен lock-файл. Если он уже занят, значит экземпляр уже работает.

Путь к lock-файлу:
Path lockPath = Path.of("app.lock");


Открываем файл и пытаемся поставить блокировку:
FileChannel channel = FileChannel.open(lockPath,
StandardOpenOption.CREATE, StandardOpenOption.WRITE);

FileLock lock = channel.tryLock();


Если lock не получен выходим:
if (lock == null) {
System.out.println("Экземпляр уже запущен — выходим");
System.exit(1);
}


🔥 Теперь второй запуск не пройдёт, пока первый держит блокировку.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍5🔥4
🎄 Джависты, всех с наступающим!

Желаю каждому провести новый 2026 год намного лучше и выполнить все планы. Моя цель: набрать более 15 тысяч подписчиков.
Please open Telegram to view this post
VIEW IN TELEGRAM
132🔥7👍5🤝1
Разделение PDF на страницы!

Когда PDF большой, удобнее разрезать его на отдельные страницы.

Подключаем библиотеку:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.31</version>
</dependency>


Открываем исходный PDF:
PDDocument doc = PDDocument.load(new File("input.pdf"));


Режем на страницы и сохраняем:
Splitter splitter = new Splitter();
List<PDDocument> pages = splitter.split(doc);


Сохраняем каждую страницу отдельным файлом:
int i = 1;
for (PDDocument page : pages) {
page.save("page-" + i + ".pdf");
page.close();
i++;
}
doc.close();


🔥 В итоге получаем page-1.pdf, page-2.pdf, page-3.pdf и так далее. Удобно, когда нужно быстро раздать страницы.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍5🤝5
📂 Напоминалка по DNS!

Например, когда домен вводится в браузере, он сначала проверяет кеш, если IP не найден — запускается цепочка DNS-запросов: Root - TLD - Authoritative сервер. В итоге браузер получает IP и только после этого отправляет HTTP-запрос на сервер.

На картинке — наглядная схема того, как именно работает DNS-резолв шаг за шагом.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106🔥6🤝1
Генератор отчёта о размере файлов!

Иногда нужно быстро понять, что занимает место в директории.
Сделаем простой скрипт который пройдётся по файлам, получит размер каждого и сформирует отчёт.

Указываем папку для анализа и файл отчёта:
var dir = java.nio.file.Path.of("logs");
var report = java.nio.file.Path.of("report.txt");


Создаём список строк, которые пойдут в отчёт:
var lines = new java.util.ArrayList<String>();
lines.add("Отчёт по папке: " + dir.toAbsolutePath());
lines.add("");


Проходим по файлам и добавляем строки:
try (var s = java.nio.file.Files.list(dir)) {
s.filter(java.nio.file.Files::isRegularFile).forEach(p -> {
try {
long size = java.nio.file.Files.size(p);
lines.add(p.getFileName() + " → " + size + " bytes");
} catch (Exception e) {
lines.add(p.getFileName() + " → ошибка чтения");
}
});
}


Сохраняем отчёт в файл и выводим путь:
java.nio.file.Files.write(report, lines);
System.out.println("Готово: " + report.toAbsolutePath());


🔥 В итоге появляется report.txt со списком файлов и их размером.

👉 Java Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥7👍4
👩‍💻 Парсим Wi-Fi сети в Windows!

Java не имеет прямого API для работы с Wi-Fi, но может запускать системные утилиты Windows и разбирать их вывод.

В этом посте:
• Запускаем netsh;

• Считываем вывод консоли;

• Парсим SSID доступных Wi-Fi сетей.


Такой приём полезен для утилит, установщиков, и Java-приложений, которым нужно знать текущее Wi-Fi сети.

👉 Java Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍54
This media is not supported in your browser
VIEW IN TELEGRAM
☕️ Google Guava — полезные утилиты и расширения!

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

Оставляю ссылочку: GitHub 📱


👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍7🔥5
Запоминатор паролей в консоли!

Сегодня пошагово расскажу как можно запросить пароль и ресурс для этого пароля, после чего сохранить его и вывести.

1. Модель записи:

record Entry(String resource, String login, String password) {}


2. Хранилище в памяти:

List<Entry> storage = new ArrayList<>();


3. Добавление записи:
System.out.print("Введите ресурс: ");
String resource = sc.nextLine().trim();

System.out.print("Введите логин: ");
String login = sc.nextLine().trim();

System.out.print("Введите пароль: ");
String password = sc.nextLine();

storage.add(new Entry(resource, login, password));
System.out.println("Сохранено");


4. Вывод всего сохранённого:
System.out.println("=== Сохранённые записи (" + storage.size() + ") ===");
for (Entry e : storage) {
System.out.println("- " + e.resource() + " | " + e.login() + " | " + mask(e.password()));
}


5. Маска пароля:
static String mask(String s) {
return s.length() <= 2 ? "**" : s.substring(0, 2) + "*".repeat(s.length() - 2);
}


🔥 Дальше можно добавить шифрование, поиск по тегам и многое другое.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥4
📂 Шпаргалка по сортировке в Java!

Например, Comparable задаёт естественный порядок внутри класса через метод compareTo(), а Comparator реализует внешнюю кастомную сортировку через compare(o1, o2).

На изображении — основные отличия, которые стоит держать под рукой при работе с коллекциями и алгоритмами упорядочивания.

Сохрани, чтобы не забыть!

👉 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5🔥4
Поисковик по текстовому файлу!

Иногда нужно быстро найти нужную информацию в большом .txt файле. Java позволяет построчно читать файл и искать совпадения без загрузки всего в память.

Указываем файл и слово для поиска:
var file = java.nio.file.Path.of("data.txt");
var query = "error";


Готовим счётчик найденных строк:
int found = 0;


Читаем файл построчно и проверяем каждую строку:
try (var lines = java.nio.file.Files.lines(file)) {
for (var line : (Iterable<String>) lines::iterator) {


Ищем совпадение и выводим строку:
        if (line.toLowerCase().contains(query.toLowerCase())) {
System.out.println(line);
found++;
}
}
}


Печатаем итог поиска:
System.out.println("Найдено строк: " + found);


🔥 В итоге получаем простой поисковик по текстовому файлу. Подходит для логов, отчётов и больших текстов.

👉 Java Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍7🔥6
❤️ Инженерия создания микросервиса на Spring WebFlux!

В статье показан практический подход к разработке современного микросервиса с нуля, от описания API до готового сервиса:

• Проектирование REST API
• Использование Spring WebFlux
• Генерация кода через
• Управление схемой БД


🔊 Читать статью на Habr!


👉 Java Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥65👍4
Поиск файлов в папке!

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

Задаём папку для поиска:
Path dir = Path.of("docs");


Проходим по файлам рекурсивно:
Files.walk(dir)


Фильтруем по условию:
.filter(p -> p.toString().endsWith(".pdf"))


Выводим найденные файлы:
.forEach(p -> System.out.println(p));


🔥 Удобно для поиска логов, документов, отчётов и автоматизации задач.

👉 Java Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥4