Он гарантирует, что запись переменной одним потоком сразу станет видна другим. Это решает типичную проблему с залипающими флагами в циклах.
В этом посте:
• Покажем, как поток может не увидеть изменение;
• Исправим это, объявив;
• Объясним ограничение.
Применяйте
volatile для флагов и статусов, а для счётчиков и составных операций используйте атомики или синхронизацию.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤5👍4
Java позволяет архивировать файлы без сторонних библиотек. Можно легко собрать несколько документов или папку в
.zip. Это удобно для резервных копий, логов или экспорта данных.Открываем поток для архива:
var zip = new java.util.zip.ZipOutputStream(
java.nio.file.Files.newOutputStream(java.nio.file.Path.of("archive.zip"))
);
Добавляем файл в архив:
var file = java.nio.file.Path.of("data.txt");
zip.putNextEntry(new java.util.zip.ZipEntry(file.getFileName().toString()));
java.nio.file.Files.copy(file, zip);
zip.closeEntry();Закрываем архив:
zip.close();
System.out.println("Архив создан!");
🔥 Всё работает без зависимостей только стандартная библиотека. Этот подход простой, быстрый и кроссплатформенный.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤5🔥4
Парси строки, проверяй спецзначения, сравнивай, суммируй и легко конвертируй между строками и числами. Удобный инструмент поверх примитива double.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥10👍4🤝3
Чтение пользовательского ввода через Scanner!
Создаём Scanner и читаем имя:
Считываем возраст:
Выводим форматированный ответ:
🔥 Простой способ получать данные от пользователя. Подходит для CLI-инструментов, тестовых утилит и интерактивных задач.
👉 Java Ready | #практика
Scanner позволяет считывать данные прямо из консоли. Можно обрабатывать текст, числа и даже целые строки с пробелами.Создаём Scanner и читаем имя:
var sc = new java.util.Scanner(System.in);
System.out.print("Введите имя: ");
String name = sc.nextLine();
Считываем возраст:
System.out.print("Введите возраст: ");
int age = sc.nextInt();Выводим форматированный ответ:
System.out.printf("Привет, %s! Тебе %d лет.%n", name, age);
sc.close();🔥 Простой способ получать данные от пользователя. Подходит для CLI-инструментов, тестовых утилит и интерактивных задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥4
Строка должна содержать ровно 4 секции, разделённые точками. Каждая секция — только цифры без ведущих нулей и значение в диапазоне от 0 до 255. Если все условия выполнены — адрес корректен.
В этой задаче:
• Разбиваем строку на 4 части по символу «.»;
• Проверяем, что секции содержат только цифры;
• Проверяем диапазон значений и отсутствие ведущих нулей.
Так определяется, корректен ли IPv4-адрес без регулярных выражений и сторонних библиотек.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤4👍4
Форматированный вывод таблицы через printf!
Иногда нужно вывести таблицу с ровными колонками: имена, цены, количество.
Если просто печатать через
Выводим заголовок таблицы:
Добавляем строки с выравниванием:
Результат в консоли:
🔥 Форматирование делает консольные отчёты и списки аккуратными. Можно выравнивать по левому краю, задавать ширину и количество знаков после запятой.
👉 Java Ready | #практика
Иногда нужно вывести таблицу с ровными колонками: имена, цены, количество.
Если просто печатать через
System.out.println, всё поедет. Решение — метод printf, который поддерживает форматирование, как в C.Выводим заголовок таблицы:
System.out.printf("%-10s %-8s %-6s%n", "Товар", "Цена", "Кол-во");
System.out.println("-------------------------");Добавляем строки с выравниванием:
System.out.printf("%-10s %-8.2f %-6d%n", "Яблоко", 2.5, 10);
System.out.printf("%-10s %-8.2f %-6d%n", "Банан", 3.75, 5);
System.out.printf("%-10s %-8.2f %-6d%n", "Апельсин", 4.1, 12);Результат в консоли:
Товар Цена Кол-во
--------------------------
Яблоко 2.50 10
Банан 3.75 5
Апельсин 4.10 12
🔥 Форматирование делает консольные отчёты и списки аккуратными. Можно выравнивать по левому краю, задавать ширину и количество знаков после запятой.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍8🔥6
Для кеша, логов и тестов часто нужны временные файлы и директории. Делать их вручную неудобно, но в Java есть готовые методы.
В этом посте:
• Создадим уникальный файл;
• Создадим временную папку;
• Автоматически удалим папку и файл.
Таким образом можно легко управлять временными ресурсами без лишнего кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤10👍4
Парсинг аргументов через picocli
Сегодня создадим готовый CLI с флагами, параметрами и встроенной справкой (
Подключаем:
Теперь определим саму команду, которая будет выполняться при запуске:
Далее добавим флаг, который управляет выводом:
Теперь зададим параметр, который нужно будет передать при вызове:
И наконец, опишем основную логику работы программы:
🔥 Такой подход экономит время, упрощает код и делает консольные утилиты более профессиональными и удобными для пользователя.
👉 Java Ready | #практика
Сегодня создадим готовый CLI с флагами, параметрами и встроенной справкой (
--help, --version) без ручного парсинга.Подключаем:
implementation "info.picocli:picocli:4.7.6"
Теперь определим саму команду, которая будет выполняться при запуске:
@picocli.CommandLine.Command(
name = "hello",
mixinStandardHelpOptions = true
)
class Hello implements Runnable {
Далее добавим флаг, который управляет выводом:
@picocli.CommandLine.Option(
names = "--upper",
description = "Выводить в верхнем регистре"
)
boolean upper;
Теперь зададим параметр, который нужно будет передать при вызове:
@picocli.CommandLine.Parameters(
paramLabel = "NAME",
description = "Имя пользователя"
)
String name;
И наконец, опишем основную логику работы программы:
public void run() {
var msg = "Hello, " + name;
System.out.println(upper ? msg.toUpperCase() : msg);
}}🔥 Такой подход экономит время, упрощает код и делает консольные утилиты более профессиональными и удобными для пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4❤3👎1