2012-11-23 216 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 = ""; 
    } 
}