0

wget を使用して Web サービスからファイルをダウンロードする Java アプリケーションがあります。javaを介してコマンドを実行すると、次のように返されます:「wget: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:// 部分を削除しました -.-

私は何が欠けていますか?

4

2 に答える 2

2

次のようなコマンドを実行してみてください:

プロセス p = Runtime.getRuntime().exec("/bin/bash -c "+command); // Linux の場合

また

プロセス p = Runtime.getRuntime().exec("cmd.exe /c "+command); //Windows の場合

Linux シェルまたはコマンド プロンプトを明示的に呼び出す必要がある場合があります。

これがうまくいくことを願っています。

于 2013-04-24T08:40:42.243 に答える
0

私はこれを疑う:

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

が問題です。シェルで実行すると、URL を囲む引用符が削除されます。ただし、Java 経由で実行すると、シェル経由では実行されず、URL は で始まります"http...(エラー メッセージをよく見てください)。

Runtime.exec() t引数を解析して分割したくない場合は、個々の引数を取るバリアントを検討してください。より効率的な解決策は、HttpComponentsを使用してダウンロードすることです。

于 2013-04-24T08:25:17.573 に答える