在使用Java终端调用的命令(OSX)(Call a command in terminal usi

2019-09-20 16:37发布

我想编写Java代码来运行的wget从服务器获取的图像

我相信我的wget正确安装。 如果键入:

wget http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe

我发现在我的用户帐户文件夹中的图像。

下面的Java代码是在Ubuntu上正常工作,但我不得不在移动项目OSX(山狮)

import java.io.*;
import java.io.IOException;

public class runWget
{

  public static void main (String args[])
  {
    String whatToRun = "wget     http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe";
   try
   {
     Runtime rt = Runtime.getRuntime();
     Process proc = rt.exec(whatToRun);
     int exitVal = proc.waitFor();
     System.out.println("Process exitValue:" + exitVal);
   } catch (Throwable t)
     {
       t.printStackTrace();
     }
  }
}

当我尝试在OSX上运行它,我得到的运行时错误:

产生java.io.IOException:不能运行程序“的wget”:错误= 2,没有这样的文件或目录

我将不胜感激,如果有人能告诉我什么,我做错了。

Answer 1:

如果wget确实是你的OS X系统上安装,然后尝试指定它的完整路径。

尝试:

它的wget

在命令行,然后用你的Java应用程序,完全合格的路径。

String whatToRun = "/usr/local/bin/wget http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe";


Answer 2:

漂亮明显, wget默认情况下不会在OS X安装

更有趣的东西是写像wget自己的功能。

URL url = new URL("http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe");
InputStream in = url.openStream();
OutputStream os = new FileOutputStream(new File("picture.jpe"));
byte byffer[] = new byte[1024];
int nBytesRead;
while ((nBytesRead = in.read(buffer)) != -1)
{
    os.write(buffer, 0, nBytesRead);
}
os.flush();
os.close();
in.close();


Answer 3:

这些答案都不解释你的实际问题是什么。

原因Java的失败是在/ usr / local / bin目录不在你的PATH。

显然,这是你在终端运行bash shell中的路径上。 而任何新的bash的外壳可能你在终端启动(或通过SSH或其他)。 这可能是因为你有一个像线export PATH=$PATH:/usr/local/bin的地方在〜/ .profile中,在〜/ .bash_profile,〜/ .bashrc中,或在/ etc等价物。

在Linux上,你的所有的GUI的东西是一个登录shell的孩子,所以把东西在这些文件中的一个(只要你选择一个正确的)意味着Java将最终继承该PATH不管它如何被启动。 但在Mac上,你的所有的GUI东西的launchd的孩子,你运行任何外壳只是你的GUI应用的兄弟,不是父。 因此,在bash的启动设置PATH不会影响一些从Finder或IDE或任何发射。

一旦你理解这个问题,你可以了解所有的不同的解决方案,您可以设置默认环境的launchd给用户进程 ,或做同样的事情全系统,或修改/ etc /路径,等等。



Answer 4:

它看起来像wget是OSX系统上未安装。 (,这不是对矿井要么尽管是几代老。)无论是安装或找到另一种方式来下载一个图片; Java并有HTTP支持内置原生后的所有(见java.net.URL类)。



Answer 5:

如果你得到这个错误一次,执行这样的命令:

它的wget

Runtime.getRuntime().exec(new String[]{ "/bin/sh" , "-c" ,"/usr/local/bin/wget http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe" })


文章来源: Call a command in terminal using Java (OSX)