Runtime.exec命令无法正常工作

时间:2013-04-24 08:22:54

标签: java wget runtime.exec

我有一个java应用程序,它使用wget从Web服务下载文件。当通过java执行命令时,它返回:“wget:not a http或ftp url:” 当我直接执行命令时,它运行没有问题。这是我的代码:

try {
        Debug.println("Starting copy of "+srcFile+" to "+destFile);
        String command = "wget -O " + destFile + " \""+ srcFile +"\"";
        Process p = Runtime.getRuntime().exec(command);
        int exitCode = p.waitFor();

        if(Debug.isDebugMode())
        {
            Debug.println(command);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            String s;
            while((s = stdInput.readLine()) != null)
            {
                Debug.println(s);
            }
        }
        Debug.println("Finished with code: " + String.valueOf(exitCode));
    } 
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;

这是输出:

24/04/2013 10:11:05 Starting copy of stoppenmetroken.webcolors.local/service/track?track=3b1ac68a288345c183a08c714901a398&mac=089000A09090 to /opt/byato/data/song/3b1ac68a288345c183a08c714901a398
24/04/2013 10:11:05 wget -O /opt/byato/data/song/3b1ac68a288345c183a08c714901a398 "stoppenmetroken.webcolors.local/service/track?track=3b1ac68a288345c183a08c714901a398&mac=089000A09090"
24/04/2013 10:11:05 wget: not an http or ftp url: "http://stoppenmetroken.webcolors.local/service/track?track=3b1ac68a288345c183a08c714901a398&mac=089000A09090"
24/04/2013 10:11:05 Finished with code: 1

ps:我删除了输出的http://部分,因为我没有足够的声誉点 - .-

我缺少什么?

2 个答案:

答案 0 :(得分:2)

你能尝试执行这样的命令:

进程p = Runtime.getRuntime()。exec(“/ bin / bash -c”+ command); // for linux

进程p = Runtime.getRuntime()。exec(“cmd.exe / c”+ command); //适用于Windows

有时我们需要显式调用Linux shell或命令提示符。

希望这会奏效。

答案 1 :(得分:0)

我怀疑这个:

String command = "wget -O " + destFile + " \""+ srcFile +"\"";

是问题所在。在shell中运行时,将删除URL周围的引号。但是,当您通过Java运行时,您没有通过shell运行,并且您的URL以"http...开头(仔细查看错误消息)。

如果您不希望Runtime.exec() t解析并拆分您的参数,那么您可能会考虑the variant that takes individual arguments。更有效的解决方案仍然是使用HttpComponents下载。