Хочешь запустить внешнюю программу прямо из Java?
Иногда нужно вызвать системную утилиту, открыть файл, запустить скрипт для этого в Java есть
Самый простой запуск команды:
Запуск с аргументами:
Получение вывода программы:
🔥 Подходит для запуска CLI-утилит, тестов, скриптов, любых системных программ.
👉 Java Ready | #совет
Иногда нужно вызвать системную утилиту, открыть файл, запустить скрипт для этого в Java есть
Runtime и ProcessBuilder.Самый простой запуск команды:
Runtime.getRuntime().exec("notepad.exe");Запуск с аргументами:
new ProcessBuilder("ping", "google.com")
.inheritIO()
.start();Получение вывода программы:
Process p = Runtime.getRuntime().exec("java -version");
p.getInputStream().transferTo(System.out);Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4❤3😁1
Часто нужно показать
PDF не как файл, а как набор картинок. Для этого можно на Java пройтись по страницам PDF и сохранить каждую в отдельный PNG.В этом посте:
• Загружаем документ;
• Используем PDFRenderer;
• Сохраняем каждую страницу.
Если работаете с
PDF эта задаче обязательно пригодится вам для отображения всего в удобных фото.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥6❤3
Вывод дерева директорий!
Иногда нужно быстро посмотреть структуру проекта прямо из Java-кода. Удобнее всего вывести дерево папок и файлов с отступами и ветками. Такой приём подходит для утилит, проектов и отладочных скриптов.
Задаём корневую директорию и запускаем вывод дерева:
Пишем функцию, которая выводит имя текущей директории и обходит содержимое:
Добавляем ветки и рекурсивный обход поддиректорий:
🔥 В результате в консоли появится дерево папок, подкаталогов и файлов с ветками и отступами.
👉 Java Ready | #практика
Иногда нужно быстро посмотреть структуру проекта прямо из Java-кода. Удобнее всего вывести дерево папок и файлов с отступами и ветками. Такой приём подходит для утилит, проектов и отладочных скриптов.
Задаём корневую директорию и запускаем вывод дерева:
var root = java.nio.file.Path.of("src");
printTree(root, "");Пишем функцию, которая выводит имя текущей директории и обходит содержимое:
void printTree(java.nio.file.Path dir, String prefix) {
System.out.println(prefix + dir.getFileName());
try (var s = java.nio.file.Files.list(dir)) {
var children = s.toList();
for (int i = 0; i < children.size(); i++) {
var p = children.get(i);
boolean last = (i == children.size() - 1);Добавляем ветки и рекурсивный обход поддиректорий:
try {
var pref = prefix + (last ? "└── " : "├── ");
if (Files.isDirectory(p)) printTree(p, pref);
else System.out.println(pref + p.getFileName());
} catch (IOException e) {
System.out.println("Ошибка: " + e.getMessage());
}🔥 В результате в консоли появится дерево папок, подкаталогов и файлов с ветками и отступами.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍3❤2
Java может запускать утилиты операционной системы и анализировать их вывод.
В этом посте:
• Запускаем системные утилиты;
• Читаем вывод;
• Парсим имена устройств.
С использованием этого метода можно встроить получения
Bluetooth устройств в установщики или другие утилиты.Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥5👍3
Генерация таблицы из данных!
Иногда нужно красиво отобразить список данных. Простой
Готовим данные для таблицы:
Определяем ширину колонок и формат вывода:
Проходим по записям и печатаем таблицу:
🔥 На выходе получаем ровную таблицу с красивым выводом. Удобно для отчётов, логов и представления структурированных данных.
👉 Java Ready | #практика
Иногда нужно красиво отобразить список данных. Простой
println ломает выравнивание, поэтому лучше собрать таблицу вручную. Java позволяет формировать ровные колонки через printf.Готовим данные для таблицы:
var rows = java.util.List.of(
new String[]{"Имя", "Возраст", "Город"},
new String[]{"Alice", "22", "Paris"},
new String[]{"Bob", "30", "Berlin"}
);
Определяем ширину колонок и формат вывода:
String fmt = "%-10s %-8s %-10s%n";
Проходим по записям и печатаем таблицу:
for (var r : rows) {
System.out.printf(fmt, r[0], r[1], r[2]);
}
🔥 На выходе получаем ровную таблицу с красивым выводом. Удобно для отчётов, логов и представления структурированных данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6🔥4
Например, DNS-сервер преобразует доменное имя в IP-адрес, а кеш-сервер ускоряет отдачу данных, снижая нагрузку на базу.
На картинке — фундамент серверной инфраструктуры, без которой не работает ни одно современное приложение.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥6❤5
Подсчёт повторяющихся значений в массиве!
Когда нужно понять структуру данных, важно знать, какие значения повторяются. В Java достаточно пройтись по массиву и заполнять
Создаём массив с повторяющимися элементами:
Подсчитываем частоту элементов через
Выводим результат:
🔥 На выходе получаем компактную статистику по значениям. Такой способ работает для любых типов чисел, строк и объектов.
👉 Java Ready | #практика
Когда нужно понять структуру данных, важно знать, какие значения повторяются. В Java достаточно пройтись по массиву и заполнять
Map.Создаём массив с повторяющимися элементами:
int[] nums = {1, 2, 3, 2, 3, 3, 4, 1};Подсчитываем частоту элементов через
HashMap:var freq = new java.util.HashMap<Integer, Integer>();
for (int n : nums) {
freq.put(n, freq.getOrDefault(n, 0) + 1);
}
Выводим результат:
freq.forEach((k, v) -> System.out.println(k + " -> " + v + " раз"));
🔥 На выходе получаем компактную статистику по значениям. Такой способ работает для любых типов чисел, строк и объектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5❤4😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Если хочешь разобраться в теме глубже, чем позволяют блоги и туториалы, загляни на этот сайт. Здесь тысячи публикаций по IT, математике, кибербезопасности, машинному обучению и не только. Можно искать по ключевым словам и даже цитировать в своих проектах или статьях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5🤝5❤1😁1
Скрытые риски автобоксинга и анбоксинга!
Сегодня рассмотрим одну из скрытых ловушек Java — автобоксинг и анбоксинг. Эти механизмы удобны, но могут вызывать неожиданные ошибки, влияя на производительность и корректность работы кода
При сравнении объектов-оберток (например,
Значения от -128 до 127 кешируются
Используйте метод
А при анбоксинге объекта-обертки, содержащего
Проверяйте объект на null перед анбоксингом:
🔥 Эти знания помогут вам избежать неожиданных ошибок и сделать код более надежным.
👉 Java Ready | #практика
Сегодня рассмотрим одну из скрытых ловушек Java — автобоксинг и анбоксинг. Эти механизмы удобны, но могут вызывать неожиданные ошибки, влияя на производительность и корректность работы кода
При сравнении объектов-оберток (например,
Integer) с использованием оператора == вы можете получить неожиданный результат:Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false
Значения от -128 до 127 кешируются
JVM для оберток Integer. Поэтому ссылки на объекты с такими значениями указывают на один и тот же объект, а вне этого диапазона создаются новые экземпляры. Используйте метод
.equals() для сравнения значений. System.out.println(c.equals(d)); // true
А при анбоксинге объекта-обертки, содержащего
null, возникает NullPointerException:Integer value = null;
int result = value; // Ошибка: NullPointerException
Проверяйте объект на null перед анбоксингом:
if (value != null) {
int result = value;
}🔥 Эти знания помогут вам избежать неожиданных ошибок и сделать код более надежным.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍4🔥3
Например,
/bin содержит системные бинарные файлы, а /etc — конфигурации, управляющие поведением системы.На картинке — директории Linux, их назначение и место в иерархии.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5❤3🤝2
Часто нужно превратить серию кадров в видео. Java отлично подходит для того, чтобы управлять этим процессом и автоматизировать вызов
ffmpeg.В этом посте:
• Формируем команду;
• Запускаем процесс;
• Ждём завершения работы.
Такой подход удобно использовать в пайплайнах рендеринга, всё работает быстро и просто.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍3