【问题标题】:HttpURLConnection and download large filesHttpURLConnection 和下载大文件
【发布时间】:2015-08-01 16:20:01
【问题描述】:

我使用HttpURLConnection 从网址下载文件。

 URL obj = new URL(url);
 HttpURLConnection con = (HttpURLConnection) obj.openConnection();

 // optional default is GET
 con.setRequestMethod("GET");
 con.setRequestProperty("Cache-Control", "no-cache");

 int responseCode = con.getResponseCode();

 System.out.println("\nSending 'GET' request to URL : " + url);
 System.out.println("Response Code : " + responseCode);

 try {
     InputStream inputStream = con.getInputStream();
     FileOutputStream outputStream = new FileOutputStream("C:\\programs\\TRYFILE.csv");

     int bytesRead = -1;
     byte[] buffer = new byte[4096];

     while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
     }

 } catch(Exception e) {

 } finally {
       outputStream.close(); 
       inputStream.close();
 }

该代码适用于下载小型文件(即 25 KB)。我没有尝试下载大文件(大约 100 MB),因为来自特定 URL 的文件总是很小。

我想知道如果我尝试使用此代码下载更大的文件会发生什么:它会继续工作还是抛出异常?对于更大的文件,我是否需要实现代码(例如使用setConnectTimeoutsetReadTimeout)?

您是否可以建议我可以尝试使用此代码下载大文件的网址?

【问题讨论】:

  • 你能推荐包含大文本或 csv 文件的 url 吗?因为我无法尝试使用我的 URL?我的 URL 总是提供小文件。
  • 生成一个大文件,将其放在服务器上可访问的位置,并使用指向该文件的 URL。应该不难。请记住多次(循环)运行此实验,以增加遇到(可能)问题的机会。
  • 您的主线程将被锁定,直到下载完成。所以,如果你想让你的程序保持活跃,你应该在另一个线程中执行该任务。

标签: java http httpurlconnection


【解决方案1】:

按照 cmets 中的建议,自己创建一个大文件。要通过 HTTP 提供服务,最简单的方法可能是从放置文件的目录运行 Python 3 -

python -m http.server

它将在 8000 上启动服务器。有关详细信息,请参阅 this blog post,或查看 python 文档。

然后你可以自己测试一下。

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2012-06-15
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2019-03-24
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多