在Java中从URL下载文件的方法

时间:2013-02-11 15:12:41

标签: java url file-io apache-commons

我想从嵌入式设备上运行的网络服务器下载二进制文件。使用该文件后,可以在基本的http身份验证后手动下载该文件 URL:http://10.10.10.10/config.bin ...现在我想用一个简单的Java应用程序自动化这个过程。通过使用我设法下载文件的基本java工具:

URL mlrrl = new URL(url);
            HttpURLConnection  con = (HttpURLConnection) mlrUrl.openConnection();

            con.setRequestMethod("GET");
            con.setAllowUserInteraction(false);
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setConnectTimeout(10000);
            con.setRequestProperty("Authorization", "Basic " + authStringEnc);

            InputStream stream = con.getInputStream();
            BufferedInputStream in = new BufferedInputStream(stream);
            FileOutputStream file = new FileOutputStream("configDown.bin");
            BufferedOutputStream out = new BufferedOutputStream(file);
            int i;
            while ((i = in.read()) != -1) {
                out.write(i);
            }
            out.flush();

这似乎工作正常!与手动(通过Browser-Webinterface)下载的文件相比,生成的文件具有相同的长度,但在使用十六进制编辑器打开两个二进制文件后,它们是不同的。

我的问题:

  1. 为什么十六进制代码有所不同? (可能缺少连接属性?)
  2. apache.commons包中有一个copyUrlToFile-Method。作为替代方案,是否可以将它与基本的http身份验证一起使用?
  3. 是否还有其他用于从网址下载文件的java库或工具?

2 个答案:

答案 0 :(得分:1)

使用(已弃用的)Apache Commons HttpClient(http://hc.apache.org/httpclient-3.x/)的恕我直言是最简单的方法。或者,您可以使用新的和(据称)改进的HttpComponents(http://hc.apache.org/)。

答案 1 :(得分:0)

我无法解释原因,但错误的属性“setDoOutput”=“true”可能会影响下载文件的内容。将值设置为“false”为我解决了这个问题!