TGViewer
Channel Public Channel
Java Ready | Программирование

Java Ready | Программирование

@java_ready

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

Cотрудничество: @energy_c
Subscribers
9.26K
Photos
1.4K
Videos
77
Links
759

Showing posts older than #1617 · Back to latest

Older Posts 18 shown
Post #1615 1.95K
  • 👍 11
  • 🔥 7
  • ❤ 6
Post #1614 2.39K
Генератор отчёта о размере файлов!

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

Указываем папку для анализа и файл отчёта:
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 | #практика
  • ❤ 8
  • 🔥 7
  • 👍 5
Post #1612 2.04K
📂 Напоминалка по DNS!

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

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

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

👉 Java Ready | #ресурс
  • 👍 10
  • 🔥 7
  • ❤ 6
  • 🤝 1
Post #1611 2.15K
Разделение 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 | #совет
  • 🔥 12
  • 👍 5
  • 🤝 5
Post #1610 2.36K
🎄 Джависты, всех с наступающим!

Желаю каждому провести новый 2026 год намного лучше и выполнить все планы. Моя цель: набрать более 15 тысяч подписчиков.
  • ❤ 32
  • 🔥 8
  • 👍 5
  • 🤝 1
Post #1609 2.41K
Защита от повторного запуска!

Иногда нельзя, чтобы приложение запускалось дважды. Решение простое, нужен 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 | #совет
  • ❤ 12
  • 👍 5
  • 🔥 5
Post #1608 2.19K
📂 Напоминалка про Modem vs Router!

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

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

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

👉 Java Ready | #ресурс
  • 👍 8
  • ❤ 6
  • 🔥 6
Post #1607 2.25K
Система учёта задач!

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 | #практика
  • ❤ 5
  • 👍 5
  • 🔥 4
Post #1605 1.84K
📂 Напоминалка по IPv4 vs IPv6!

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

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

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

👉 Java Ready | #ресурс
  • ❤ 11
  • 👍 8
  • 🔥 5
Post #1604 1.88K
Защита от зависаний!

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

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


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


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


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

👉 Java Ready | #совет
  • ❤ 5
  • 🔥 5
  • 👍 4
Post #1602 2.14K
😎 SQL-101 — руководство, помогающее освоить язык и укрепить базу тем, кто уже работает с БД.

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

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


👉 Java Ready | #ресурс
  • ❤ 9
  • 👍 5
  • 🔥 5
Post #1601 2.05K
Делаем игру “Угадай число”

Компьютер загадывает число, а игрок пытается угадать, получая подсказки “больше/меньше”.

Задаём случайное число и готовим ввод с консоли:
var rnd = new java.util.Random();
int secret = rnd.nextInt(100) + 1; // 1..100
var sc = new java.util.Scanner(System.in);
int tries = 0;


Запускаем цикл попыток и читаем ответ игрока:
while (true) {
System.out.print("Введите число 1..100: ");
int guess = sc.nextInt();
tries++;


Сравниваем и даём подсказку “выше/ниже”:
    if (guess < secret) System.out.println("Больше!");
else if (guess > secret) System.out.println("Меньше!");
else break;
}


Выводим победу и число попыток:
System.out.println("Угадал! Число: " + secret);
System.out.println("Попыток: " + tries);
sc.close();


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

👉 Java Ready | #практика
  • ❤ 7
  • 👍 7
  • 🔥 4
  • 🤝 2
Post #1595 2.05K
Многопоточная загрузка!

Когда нужно быстро скачать много файлов один поток превращает всё в очередь. Решение простое, грузить параллельно через пул потоков.

Создаём пул потоков:
ExecutorService pool = Executors.newFixedThreadPool(4);


Кидаем задачи на скачивание:
pool.submit(() -> download(url1));
pool.submit(() -> download(url2));
pool.submit(() -> download(url3));


Дожидаемся завершения и закрываем пул:
pool.shutdown();
pool.awaitTermination(1, TimeUnit.MINUTES);


Итог такой, что несколько загрузок идут одновременно.

👉 Java Ready | #совет
  • 👍 10
  • ❤ 6
  • 🔥 5
Post #1594 1.89K
Реализация простого калькулятора!

Калькулятор это классическая задача для консольных приложений.

Создаём сканер для ввода данных и основные переменные:
var sc = new java.util.Scanner(System.in);
boolean run = true;


Печатаем меню и принимаем ввод от пользователя:
while (run) {
System.out.println("Введите первое число:");
double num1 = sc.nextDouble();

System.out.println("Выберите операцию (+, -, *, /):");
String operator = sc.next();

System.out.println("Введите второе число:");
double num2 = sc.nextDouble();


Обрабатываем операцию через switch:
    double result = 0;
switch (operator) {
case "+" -> result = num1 + num2;
case "-" -> result = num1 - num2;
case "*" -> result = num1 * num2;
case "/" -> {
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("Ошибка: деление на ноль");
continue;
}
}
default -> System.out.println("Неверная операция");
}


Выводим результат и предлагаем продолжить или выйти:
    System.out.println("Результат: " + result);
System.out.println("Хотите продолжить? (да/нет)");
String answer = sc.next();
if (answer.equalsIgnoreCase("нет")) {
run = false;
}
}
sc.close();


🔥 Мы создали простой калькулятор с выбором операции и обработкой ошибок.

👉 Java Ready | #практика
  • ❤ 6
  • 🔥 6
  • 👍 5
Post #1592 1.98K
✍️ Основные паттерны микросервисной архитектуры!

Статья включает:
• Объяснения поэтапной миграция с монолита на микросервисы
Централизованное управление API запросами;
• Управление микросервисами с помощью сетевой инфраструктуры.

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


👉 Java Ready | #статья
  • ❤ 6
  • 👍 5
  • 🔥 4
Post #1591 1.98K
Система плагинов!

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

Создаём интерфейс плагина:
public interface Plugin {
void execute();
}


Создаём класс плагина:
public class MyPlugin implements Plugin {
@Override
public void execute() {
System.out.println("Плагин загружен!");
}
}


Реализуем кастомный ClassLoader для загрузки плагинов:
public class PluginClassLoader extends ClassLoader {
private final Path dir;

public PluginClassLoader(Path dir) {
this.dir = dir;
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
try {
Path file = dir.resolve(name.replace('.', '/') + ".class");
byte[] bytes = Files.readAllBytes(file);
return defineClass(name, bytes, 0, bytes.length);
} catch (IOException e) {
throw new ClassNotFoundException(name, e);
}
}
}


Загружаем плагин динамически:
Path pluginDir = Path.of("plugins");
PluginClassLoader loader = new PluginClassLoader(pluginDir);
Class<?> pluginClass = loader.loadClass("MyPlugin");
Plugin plugin = (Plugin) pluginClass.getDeclaredConstructor().newInstance();
plugin.execute();


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

👉 Java Ready | #совет
  • 👍 6
  • ❤ 5
  • 🔥 4
Post #1589 1.95K
📂 Напоминалка по ArrayList!

ArrayList это удобная коллекция для работы с динамическими списками в Java. На картинке собраны основные методы: от инициализации списка до сортировки, удаления и итерации элементов.

Сохрани, чтобы всегда быть в курсе!

👉 Java Ready | #ресурс
  • ❤ 10
  • 🔥 6
  • 👍 4
Post #1584 2.29K
👩‍💻 Хешируем большие файлы!

Большие файлы нельзя читать целиком в оперативной памяти, ведь она может закончиться. Вместо этого лучше читать файл чанками.

В этом посте:
• Создаём MessageDigest;

• Читаем файл;

• Получаем результат.


Такой подход используют для проверки целостности загрузок, поиска дубликатов и контроля файловых операций.

👉 Java Ready | #гайд
  • 🔥 12
  • ❤ 6
  • 👍 6
  • 🤝 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →