2015-06-02 214 views
0

我目前在Ubuntu的终端中使用了一个名为“curl”的命令,将我的.RDF文件上传到Virtuoso RDF Store。在Java终端中执行Linux命令

curl -T FILE URL -u USER:PASSWORD 

我想自动化这些过程,以便在eclipse中创建Java函数。此代码不起作用。

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变量中,curl将不可见....您可能想要调试诸如'printenv PATH'之类的东西,并检查 – Palcente

+0

如果您只想在Eclipse中的某些文件上执行程序,然后使用“外部工具”,它位于调试和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通常是一个坏主意,为什么不使用Java API的HTTP上传文件?