2015-06-02 2 views
0

В настоящее время я использую команду «curl» из Terminal в Ubuntu, загружаю файлы .RDF в Virtuoso RDF Store.Выполнение команды Linux в терминале с Java

curl -T FILE URL -u USER:PASSWORD 

Я хочу автоматизировать этот процесс, чтобы создать Java-функцию в eclipse. Этот код не работает.

String[] command = {"curl -T", FILENAME, URL, "-u", credentials.USERNAME+":"+credentials.PASSWORD}; 
Runtime.getRuntime().exec(command) 

Я также пробовал с этим. Появится Xterm, но он показывает эту ошибку (даже если файл находится в пути функции):

*"/usr/bin/xterm. Can't execvp "curl" no such a directory or file"* 


Runtime.getRuntime().exec("/usr/bin/xterm -e \"curl -T " + FILENAME 
                 + " " + URL + "-u " + credentials.USERNAME 
                 + ":" + credentials.PASSWORD + "\""); 

Я был бы признателен за любую помощь по этому вопросу.

Заранее спасибо

+0

Вы используете его как себя? переменные env могут отличаться, если нет, и завиток не будет видимым, если не в переменной PATH .... вы можете отлаживать что-то вроде 'printenv PATH' и проверить – Palcente

+0

Если вы хотите просто выполнить программу для некоторых файлов в Eclipse , затем используйте «Внешние инструменты», которые расположены рядом с иконками панели инструментов Debug и Java. Эти конфигурации запуска должны быть более удобными. –

ответ

3

Мне было тяжело пытаться запускать команды с использованием Runtime.exec() в прошлом. В любом случае я сдвинул с помощью ProcessBuilder следующим образом:

ProcessBuilder pbuilder = new ProcessBuilder("bash", "-c", <<your command as string>>); 
     File err = new File("err.txt"); 
     try { 
      pbuilder.redirectError(err); 
      Process p = pbuilder.start(); 
      p.waitFor();  

     } catch (Exception e) 
     { 
      //handle exceptions if any. 
     } 

стандартный поток ошибок линия не является обязательным, для целей отладки. Я уверен, что он может быть непосредственно распечатан на консоль, но пока не проверял его. Обновит мой ответ, как только найду больше.

Вы можете ознакомиться со страницей документации here.

PS: Также проверьте, есть ли у вас необходимые разрешения для выполнения требуемой задачи.

+0

Я очень ценю это @blumonkey. Я ничего не знал о ProcessBuilder, но он действительно решает мою проблему: Во всяком случае, у меня проблемы с ловушками ошибок. Эта строка не работает для меня: 'pbuilder.redirectError (err); ' Вместо этого я должен использовать код' pbuilder.redirectErrorStream() ', и я не могу поймать ошибки. – Havor

+0

Странно. Возможно, ошибки печатаются в STDOUT, а не в STDERR. Попробуйте также перенаправить вывод. Обратитесь к [здесь] (http://stackoverflow.com/questions/16714127/how-to-redirect-process-builders-output-to-a-string) для перенаправления на консоль. Вы можете немного изменить принятый ответ для errorStream. – blumonkey

0

Использование Runtime.exec обычно плохая идея, почему бы не использовать API-интерфейсы HTTP Java для загрузки файлов?