В этой статье:
• Что такое Robolectric и как он работает
• Как использовать Robolectric для тестирования без эмулятора и устройства
• Модификация байткода и использование ASM и кастомных ClassLoader'ов 🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥3
Подписанный
JAR позволяет убедиться, что файл не изменяли после сборки. Это важно, когда приложение скачивает плагины, обновления или модули.В этом посте:
• Запускаем проверку подписи;
• Считываем вывод команды;
• Проверяем результат.
Такой приём помогает повысить безопасность обновлений и модульных систем.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤5👍5
Даже самые простые приложения часто требуют случайности. Стандартная Java позволяет сделать это быстро и просто.
Понимание диапазонов и типов возвращаемых значений помогает избежать типичных ошибок и делает код предсказуемым. Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍7❤4🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Этот сайт помогает анализировать структуры данных: деревья, графы, обходы и множество другого. Здесь нет решений задач или подготовкой к собеседованиям, упор именно на понимание того, как и почему всё устроено. Материал подается последовательно и концептуально, поэтому хорошо подходит даже новичкам.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤6🔥5🤝3
Защита от повторного запуска!
Иногда приложение нельзя запускать дважды, второй экземпляр создаёт конфликты и ошибки. Решение создать lock-файл, первый запуск ставит блокировку, второй сразу выходит.
Создаём lock-файл:
Открываем и пытаемся заблокировать:
Если блокировка не получена — второй запуск запрещён:
Если всё ок, то приложение работает:
👉 Java Ready | #совет
Иногда приложение нельзя запускать дважды, второй экземпляр создаёт конфликты и ошибки. Решение создать lock-файл, первый запуск ставит блокировку, второй сразу выходит.
Создаём lock-файл:
Path lockPath = Path.of("app.lock");Открываем и пытаемся заблокировать:
FileChannel ch = FileChannel.open(lockPath,
StandardOpenOption.CREATE, StandardOpenOption.WRITE);
FileLock lock = ch.tryLock();
Если блокировка не получена — второй запуск запрещён:
if (lock == null) {
System.out.println("Экземпляр уже запущен");
System.exit(1);
}Если всё ок, то приложение работает:
System.out.println("Запуск разрешён ✅");Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Каждый шаблон снабжён кратким описанием, структурной диаграммой и кодом. Подойдёт как для повторения, так и для практики при разработке крупных проектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥8❤6
Генератор резервной копии папки!
Резервные копии спасают от случайных удалений и ошибок. В Java можно скопировать целую папку со всеми файлами.
Указываем исходную папку и каталог для резервной копии:
Создаём папку для бэкапа, если её ещё нет:
Проходим по файлам в исходной папке:
Копируем каждый файл в папку backup:
Сообщаем о результате:
В итоге получаем копию всех файлов из data в backup.
👉 Java Ready | #практика
Резервные копии спасают от случайных удалений и ошибок. В Java можно скопировать целую папку со всеми файлами.
Указываем исходную папку и каталог для резервной копии:
var source = java.nio.file.Path.of("data");
var backup = java.nio.file.Path.of("backup");Создаём папку для бэкапа, если её ещё нет:
if (!java.nio.file.Files.exists(backup))
java.nio.file.Files.createDirectory(backup);
Проходим по файлам в исходной папке:
try (var paths = java.nio.file.Files.list(source)) {
paths.forEach(p -> {Копируем каждый файл в папку backup:
try {
var target = backup.resolve(p.getFileName());
java.nio.file.Files.copy(
p, target,
java.nio.file.StandardCopyOption.REPLACE_EXISTING
);
} catch (Exception e) {
System.out.println("Ошибка: " + p.getFileName());
}
});
}Сообщаем о результате:
System.out.println("Резервная копия создана в папке backup");В итоге получаем копию всех файлов из data в backup.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥4😁1
Когда не хочется тянуть библиотеки ради простого логирования можно сделать всё вручную. Добавим уровни (INFO, WARN, ERROR), цвет в консоли и текущее время.
В этом посте:
• Напишем метод log() с цветным выводом.
• Добавим уровни сообщений.
• Получим формат: [INFO] 12:44:05 - Сообщение.
Подходит для отладки, мини-приложений и утилит.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤7👍6