TGViewer
Java библиотека Java библиотека @javalib · 30.6K subscribers
Post #7691 768
Запускаем внешнюю команду через ProcessBuilder!

Иногда Java-приложению нужно вызвать системную утилиту, например git, ffmpeg или собственный скрипт деплоя. Склеивать такую команду в одну строку опасно, особенно если параметры приходят извне.

ProcessBuilder принимает аргументы отдельно. Так пробелы и специальные символы не превращаются в случайный shell-код.
var process = new ProcessBuilder(
"git", "status", "--short")
.redirectErrorStream(true)
.start();


redirectErrorStream(true) объединяет обычный вывод и ошибки. Это не даёт процессу зависнуть, когда буфер stderr заполняется, пока приложение читает только stdout.
try (var reader = process.inputReader()) {
var lines = reader.lines().toList();
lines.forEach(System.out::println);
}


После чтения обязательно дождитесь завершения и проверьте код возврата. Нулевой код обычно означает успех.
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new IllegalStateException("Command failed");
}


Для долгих команд добавьте waitFor с таймаутом и уничтожайте процесс при превышении лимита. Так интеграция с внешним инструментом не сможет навсегда заблокировать поток приложения.

Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪
  • 👍 1
  • 🔥 1
More from @javalib
  1. Sep 27, 2026🌞 Hibernate выполняет SQL не в том порядке, в котором ты его написал Код читается сверху…
  2. Sep 27, 2026👩‍💻 Как сделать Java-сервис устойчивее к сбоям Resilience4j добавляет готовые паттерны C…
  3. Sep 27, 2026Java: используйте Deque вместо Stack для работы по принципу LIFO («последним пришёл — перв…
  4. Sep 26, 2026Post #7686
  5. Sep 26, 2026Spring Boot 4: как перенести старые настройки При обновлении добавьте временную зависимост…
  6. Sep 26, 2026Post #7684
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 →