0

我正在尝试编写 Java 代码来运行 wget 从服务器检索图像

我相信我已经正确安装了 wget。如果我输入:

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

我在我的用户帐户文件夹中找到该图像。

以下 Java 代码在 Ubuntu 上正常运行,但我不得不将项目移至 OSX(Mountain Lion)

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,没有这样的文件或目录

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

4

5 回答 5

3

如果wget确实安装在您的 OS X 系统上,则尝试指定它的完整路径。

尝试:

哪个wget

从命令行,然后在您的 Java 应用程序中使用该完全限定路径。

String whatToRun = "/usr/local/bin/wget http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe";
于 2012-08-02T19:21:50.247 回答
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();
于 2012-08-02T19:13:43.453 回答
2

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

Java 失败的原因是 /usr/local/bin 不在您的 PATH 中。

显然,它位于您在终端中运行的 bash shell 的路径上。并且可能是您在终端中启动的任何新 bash shell(或通过 ssh 或其他方式)。这可能是因为您export PATH=$PATH:/usr/local/bin在 ~/.profile、~/.bash_profile、~/.bashrc 或 /etc 等价物中的某处有一行。

在 linux 上,你所有的 GUI 东西都是登录 shell 的子对象,所以在其中一个文件中放入一些东西(只要你选择正确的文件)意味着 Java 最终将继承该 PATH ,无论它如何启动。但是在 Mac 上,你所有的 GUI 东西都是 launchd 的子级,你运行的任何 shell 只是你的 GUI 应用程序的兄弟,而不是父级。因此,在 bash 的启动中设置 PATH 不会影响从 Finder 或 IDE 或其他任何东西启动的东西。

一旦你理解了问题,你就可以理解所有不同的解决方案——你可以设置默认环境 launchd 给用户进程,或者在系统范围内做同样的事情,或者修改 /etc/paths 等等。

于 2012-08-03T01:04:25.880 回答
0

看起来wget没有安装在那个 OSX 系统上。(它也不在我的身上,尽管它比我老了几代。)要么安装它,要么找到另一种下载图片的方法;毕竟,Java 确实具有内置的 HTTP 支持(参见java.net.URL类)。

于 2012-08-02T19:14:06.940 回答
0

如果您再次收到此错误,请执行如下命令:

哪个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" })
于 2017-09-06T07:23:45.177 回答