2013-05-29 9 views
0

Проблема: - Если исполняемая команда содержит пробелы, то System.exec не содержит содержимое строки после первого пробела.Невозможно выполнить команду, если она содержит пробелы с использованием java

Например: - если команда = "/Opt/GUIInstaller/монтажники/а Защита gh.bin" Затем Java выполняет команду вверх для /Opt/GUIInstaller/монтажники/а только и в результате ошибка как java.io.IOException: «/ Opt/GUIInstaller/монтажников/абв»: ошибка = 2, Нет такого файла или каталога

protected void launch(final String command) 
{ 
    try 
    { 
     if(command.contains("null")) 
     { 
      logger.error("Installer is not located in the specified folder: "+command); 
      System.exit(0); 
     } 
     runTime.exec(command); 
    } 
    catch (IOException ioException) { 
     logger.error(ioException.getMessage(), ioException); 
    } 
} 

ли я делаю какую-либо ошибку, пожалуйста, помогите мне решить эту проблему вопрос.

Окружающая среда: - Java7 update9 + RHEL6

+1

Try '«/ Opt/GUIInstaller/монтажники/а \\ \\ Защита gh.bin»', чтобы избежать пробелов – Tom

ответ

3

Как описано в javadocs от Process#exec(), exec(String) просто разбивает данную командную строку на токены через StringTokenizer. Если вы делаете эту работу jourself пропускания лексемы exec(), пробела там не проблема:

runTime.exec(new String[] {"/opt/GUIInstaller/installers/abc def gh.bin", "--param1=foo"}); 
+0

Даже решение работает, программа установки не запускается (я имею в виду, что окно GUI не появилось), если я попробовал его вручную, я могу запустить окно установщика, даже я проверяю выход процесса, не выдавая никаких ошибок. Пожалуйста, помогите мне решить эту проблему. – kgopi

+0

По крайней мере, дайте мне знать ** - param1 = foo ** аргумент, что он будет делать – kgopi

+0

Oh. Это всего лишь некоторый случайный параметр командной строки, чтобы проиллюстрировать, как вы их определяете. Если ваша команда не принимает никаких параметров, вам это не нужно. – creinig

0

Добавить

if(command.contains(" ")){command.replace(" ","\\ ");} 

перед Runtime.exec (команды);

Это в основном просто заменяет пробелы с сбежавших пространств ..

Edit: Или, чтобы сделать его более гладкой попытаться выполнить эту

runTime.exec(command.replace(" ","\\ ")); 

без добавления вышеупомянутой линии ..

+0

Вы могли бы, вероятно, покончить с утверждением if там, если нет места, заменитель молча ничего не сделает. – Tom

+0

Да, я думал об этом после публикации. Вот почему я его отредактировал. Спасибо за ваше уведомление, хотя;) – Dropout

+1

'' \ "' не является допустимым строковым литералом Java. Если вам нужна обратная косая черта в строке, вы должны ее избежать. –

Смежные вопросы