2013-04-24 3 views
0

У меня есть приложение Java, которое загружает файл с веб-службы с помощью wget. При выполнении команды через java она возвращается с помощью: «wget: не http или ftp url:» Когда я выполняю команду напрямую, она запускается без проблем. Вот мой код:Команда Runtime.exec не работает

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 

пс: я удалил Http: // часть вывода, потому что я не имею достаточно очков репутации -.-

Что мне не хватает?

+1

Начните с использования 'ProcessBuilder' над' Runtime # exec'. Это позволяет передавать параметры как отдельные параметры, а затем пытаться построить String, заботясь о таких вещах, как цитаты – MadProgrammer

+2

'Runtime # exec (String [])' избегает необходимости создавать команду в одну строку, тоже , – user1252434

ответ

0

Я подозреваю, что это:

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

проблема. Когда вы запускаете оболочку, кавычки вокруг URL-адреса будут удалены. Однако при запуске через Java вы не запускаете оболочку, и ваш URL начинается с "http... (внимательно посмотрите на сообщение об ошибке).

Если вы не хотите Runtime.exec() t o разобрать и разделить ваши аргументы, то вы можете рассмотреть the variant that takes individual arguments. Более эффективное решение по-прежнему будет загружаться с использованием HttpComponents.

+0

Исправлено: String [] command = {"wget", "-O", destFile, srcFile}; Теперь он работает. Thnx –

2

Вы можете попробовать выполнить команду:.

процесса р = Runtime.getRuntime() Exec ("/ bin/Баш -c" + команда); . // для Linux

или

Процесс р = Runtime.getRuntime() Exec ("cmd.exe/с" + команда); // для Windows

Иногда нам нужно явно вызвать оболочку Linux или командную строку.

Надеюсь, что это сработает.