Авторский канал по разработке на Java.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
Post #1615
1.95K

- 👍 11
- 🔥 7
- ❤ 6
JA @java_ready
Showing posts older than #1617 · Back to latest

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 со списком файлов и их размером.

<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 и так далее. Удобно, когда нужно быстро раздать страницы.

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);
}
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();
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<String> task = pool.submit(() -> longWork());
String result = task.get(3, TimeUnit.SECONDS);
task.cancel(true); // пытается прервать поток
pool.shutdownNow();
Оставляю ссылочку: Github 📱
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();
ExecutorService pool = Executors.newFixedThreadPool(4);
pool.submit(() -> download(url1));
pool.submit(() -> download(url2));
pool.submit(() -> download(url3));
pool.shutdown();
pool.awaitTermination(1, TimeUnit.MINUTES);
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();

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

public interface Plugin {
void execute();
}public class MyPlugin implements Plugin {
@Override
public void execute() {
System.out.println("Плагин загружен!");
}
}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();
ArrayList это удобная коллекция для работы с динамическими списками в Java. На картинке собраны основные методы: от инициализации списка до сортировки, удаления и итерации элементов.




• Создаём MessageDigest;
• Читаем файл;
• Получаем результат.