Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java中的URL下载文件的方法_Java_Url_File Io_Apache Commons - Fatal编程技术网

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

从Java中的URL下载文件的方法,java,url,file-io,apache-commons,Java,Url,File Io,Apache Commons,我想从运行在嵌入式设备上的Web服务器下载一个二进制文件。该文件可以在基本http身份验证之后通过使用 URL:http://10.10.10.10/config.bin。。。现在,我想用一个简单的Java应用程序自动化这个过程。通过使用基本java工具,我成功下载了该文件: URL mlrrl = new URL(url); HttpURLConnection con = (HttpURLConnection) mlrUrl.openConnection();

我想从运行在嵌入式设备上的Web服务器下载一个二进制文件。该文件可以在基本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();
这似乎很管用!与手动(通过浏览器Webinterface)下载的文件相比,生成的文件具有相同的长度,但在使用十六进制编辑器打开两个二进制文件后,它们是不同的

我的问题是:

  • 知道为什么十六进制代码不同吗?(可能缺少连接属性?)
  • apache.commons包中有一个copyUrlToFile方法。作为替代方案,是否可以将其与基本http身份验证一起使用
  • 是否有其他java库或工具用于从URL下载文件

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

    IMHO使用(不推荐使用的)apachecommons HttpClient()是实现这一点的最简单方法。或者,您可以使用新的和(据推测)改进的HttpComponents()。

    您是否检查了一个是big-endian,另一个是little-endian?文件的前8个字节似乎是相同的。所以我不认为这是一个endian问题。这只是一个疯狂的想法,尝试使用管道流(这里是一个例子:),这将消除整数的读/写。如果你想使用GET,不要
    setDoOutput
    to
    true
    ,因为这会迫使它使用POST或PUT,但我怀疑这是原因。嘿,gigadot,那是以前尝试的遗物。。。还有答案!我真的无法解释为什么POST或PUT会对下载的文件产生影响,但如果将“setDoOutput”设置为“false”,则效果会非常好,并且下载的配置文件是相同的!感谢gigadot的帮助,也感谢萨满H的建议!