У меня есть приложение, которое я пытаюсь выполнить через вызов Runtime.exec().Runtime exec с аргументами, содержащими пробелы
Поскольку некоторые аргументы имеют пробелы, как я могу правильно избежать аргументов, чтобы он работал как в Linux, так и в Windows? Я знаю, что в Windows вы обычно используете двойные кавычки вокруг строки с пробелами, а linux использует косую черту.
С пробелами я ожидаю, что программа, которую я запускаю (Windows xcopy сейчас), вернется почти сразу и указывает, что число параметров неверно. Но вызов waitFor() зависает.
String[] commandArray = new String[3];
commandArray[0] = applicationPath;
commandArray[1] = someFileWhichMayHaveSpaces;
commandArray[2] = anotherFileWhichMayHaveSpaces;
Process appProcess = Runtime.getRuntime().exec(commandArray);
int returnCode = appProcess.waitFor();
Я не думаю, что вам нужно избегать аргументов при использовании Runtime.exec(). Параметры должны передаваться непосредственно в целевое приложение без каких-либо изменений. – Richard
Переключиться на 'ProcessBuilder' –
Переключение на ProcessBuilder с тем же списком args не влияет. –