2012-11-23 354 views
0

我一直在試圖讓它可以從網上下載.exe文件,讀取它並將其寫入本地文件,然後執行。下載一個exe文件並運行

URL url = new URL("http://www.ddlands.com/downloads/Calc.exe"); 
    URLConnection c = url.openConnection(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); 
    String line = ""; 
    File file = new File("analbread"+".exe"); 
    BufferedWriter bw = new BufferedWriter(new FileWriter(file)); 
    while((line = br.readLine()) != null){ 
     bw.write(line + "\n"); 
    } 
    br.close(); 
    bw.close(); 
    Process r = Runtime.getRuntime().exec("analbread" + ".exe"); 
    System.out.println(r.toString()); 
    System.out.println("WORKS!"); 

雖然我知道由於使用BufferedWriter不起作用,我不知道它是否運行exe。

+0

請說明你的問題是什麼。你爲什麼不試試呢? – looper

+0

您是否試圖捕獲過程的輸出?如果是這樣,請使用r.getInputSream() – Muel

+0

我想要下載一個exe文件,將其保存在本地,然後運行它,所有這些都通過java進行,無需用戶交互。當我測試它時,我的代碼不工作,我無法從服務器上獲得exe的副本 –

回答

2

對於下載部分,您需要使用二進制讀/寫。詳情請參閱:Working unbuffered streams

對於執行部分,問題是Runtime.exec()-method無法啓動您的可執行文件。

至少在Linux下(我無法在Windows上測試它),您需要完整的可執行文件路徑(或者在文件與應用程序位於同一目錄時使用./[file]),以便能夠執行它。

只給予該命令適用於作爲系統的一部分的可執行文件PATH-variable

0

我用下面的方法獲得了很好的結果來運行命令行腳本。您可以創建一個運行可執行文件的批處理腳本,或者使用exec方法直接運行它 - 可能會傳遞「cmd」。這將打開一個命令提示符,您可以從中運行任何內容。

public static void runScript(String batchFile, boolean waitForExit0, int retryTime) 
{ 
    try 
    { 
     String runString = "cmd /c start " + (waitForExit0?"/wait ":"") + "/MIN " + batchFile; 
     Process p = Runtime.getRuntime().exec(runString); // /c start /wait 

     while (true) 
     { 
      try 
      { 
       int exit = p.exitValue(); 
       if (exit == 0) 
       { 
        System.out.println("completed: " + runString); 
        return; 
       } 
      } 
      catch(Exception e) 
      { 
       String s = ""; 
      } 

      Thread.sleep(retryTime); 
     } 
    } 
    catch(Exception e) 
    { 
     String s = ""; 
    } 
}