Відповідь 1:
  1. Різниця між Runtime.exec () та конструктором процесів:
  • Метод Runtime.exec (String) приймає один командний рядок, який він розбиває на команду та послідовність аргументів. Конструктори ProcessBuilder, з іншого боку, беруть лише масив рядків varargs рядків або список рядків, де кожен рядок у масиві чи списку передбачається індивідуальний аргумент. У будь-якому випадку отримані аргументи потім об'єднуються в рядок, який передається ОС для виконання.

Так, наприклад, у Windows,

Runtime.getRuntime (). Exec ("C: \ DoStuff.exe -arg1 -arg2");

запустить програму DoStuff.exe з двома заданими аргументами. У цьому випадку командний рядок стає токенізованим і знову з'єднується. Однак,

ProcessBuilder b = новий ProcessBuilder ("C: \ DoStuff.exe -arg1 -arg2");

не вдасться, якщо не трапиться програма, назва якої DoStuff.exe -arg1 -arg2 в C: \. Це тому, що токенізації немає: команда для запуску передбачається вже маркірована. Натомість слід використовувати

ProcessBuilder b = новий ProcessBuilder ("C: \ DoStuff.exe", "-arg1", "-arg2");