Как использовать класс Java processBuilder, где значения аргументов входной команды имеют тире-символы

1

Я хотел бы запустить приложение из своей службы, используя класс java processBuilder, однако это приложение имеет аргументы командной строки, которые имеют значения, которые имеют тире в них.

например> приложение -b 8 -e u-law

когда я создаю экземпляр processBuilder и передаю в "-e u-law" как один из аргументов команды, он не может обрабатывать тире в значении аргумента. Есть ли способ обойти это, чтобы заставить его работать?

  • 0
    тебе нужно сбежать из тире?
  • 0
    @charlesbabbage: нет. Скорее ему нужно разделить токены в команде String.
Теги:

1 ответ

3
Лучший ответ

Вам нужно добавить каждый токен String, то есть каждую команду sub-String, которая разделена пробелом, отдельно в массив параметров команды ProcessBuilder или List. Для этой командной строки,

e.g. >app -b 8 -e u-law

У вас есть 5 жетонов String, приложение, -b, 8, -e и u-law (поскольку у вас нет разрыва между u и тире). Тогда вы могли бы сделать что-то вроде этого:

List<String> list = new ArrayList<>();
list.add("app"); 
list.add("-b");
list.add("8"); 
list.add("-e"); 
list.add("u-law");
ProcessBuilder pBuilder = new ProcessBuilder(list);

в качестве альтернативы вы можете использовать для этого массив из 5 строк,

String[] commands = {"app", "-b", "8", "-e", "u-law"};
ProcessBuilder pBuilder = new ProcessBuilder(commands);
  • 0
    Отлично!!! Спасибо за такой быстрый ответ, высоко ценится. Чего мне не хватало, так это того, что каждая строка должна быть отдельной записью. Для таких аргументов, как: -c 1 .... Я думал, что мог бы поместить это в одну строковую запись: "-c 1", и то же самое относится и к другому значению, в котором есть тире: -e u-law ... I даже пробовал отдельные строки для этого, но пропустил отдельные строки для других, где используется только пространство. Это работает сейчас. Спасибо!
  • 0
    @BrianP: рад, что у вас это работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню