Java使用HttpClient实现文件下载

下面是使用HttpClient实现文件下载的完整攻略,我将详细讲解该过程并提供两个示例说明。

简介

HttpClient是Apache软件基金会下的一个开源HTTP客户端库,它支持Http/Https协议,并具有稳定、高效、易用的特点。本文将介绍如何使用HttpClient来实现文件下载。

下载依赖

我们需要在项目中引入HttpClient的依赖,该依赖在Maven仓库中的名称为“httpclient",需要注意的是,如果是使用HttpClient版本大于4.3.x,还需要引入另一个依赖“httpcore”,如下所示:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>    
    <artifactId>httpclient</artifactId>    
    <version>4.5.6</version>    
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>    
    <artifactId>httpcore</artifactId>    
    <version>4.4.11</version>    
</dependency>

实现文件下载

使用HttpClient实现文件下载的主要步骤如下:

  1. 创建HttpClient实例。

  2. 创建HttpGet实例,并设置下载文件的URL地址。

  3. 执行HttpGet请求,获取文件内容,并将内容写入到文件中。

  4. 关闭HttpClient连接。

具体实现方式如下所示:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class FileDownloader {
    private static final String FILE_URL = "https://example.com/file.zip";
    private static final String FILE_NAME = "file.zip";
    public static void main(String[] args) {
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
        executorService.scheduleAtFixedRate(() -> {
            try {
                downloadFile(FILE_URL, FILE_NAME);
            } catch (IOException e) {
                System.err.println("Download failed!" + e.getMessage());
            }
        }, 0, 1, TimeUnit.DAYS);
    }
    private static void downloadFile(String fileUrl, String fileName) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpGet httpget = new HttpGet(fileUrl);
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream inputStream = entity.getContent();
            FileOutputStream outputStream = new FileOutputStream(new File(fileName));
            int bytesRead = 0;
            byte[] buffer = new byte[1024];
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            outputStream.close();
            EntityUtils.consume(entity);
        }
        httpclient.close();
    }
}

在上述代码中,我们使用了HttpGet请求来下载文件;在实际应用中,可以将文件下载包装成一个服务,按需进行调用。

示例一

我们以下载网络上的一张图片为例,实现文件的下载。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ImageDownloader {
    private static final String IMAGE_URL = "https://example.com/image.jpg";
    private static final String IMAGE_NAME = "image.jpg";
    public static void main(String[] args) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpGet httpget = new HttpGet(IMAGE_URL);
        try {
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                InputStream inputStream = entity.getContent();
                FileOutputStream fileOutputStream = new FileOutputStream(new File(IMAGE_NAME));
                int bytesRead = 0;
                byte[] buffer = new byte[1024];
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, bytesRead);
                }
                fileOutputStream.close();
                EntityUtils.consume(entity);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在上述代码中,我们使用了HttpGet请求下载了一张图片,该图片的URL地址为:https://example.com/image.jpg,将下载的图片保存到了本地的文件中,文件名为:image.jpg。

示例二

我们以使用HttpClient下载一个CSV文件为例。

import java.io.*;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class CsvFileDownloader {
    public static void main(String[] args) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpGet httpget = new HttpGet("https://example.com/data.csv");
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream inputStream = entity.getContent();
            writeInputStreamToFile(inputStream, "data.csv");
        }
        httpclient.close();
    }
    private static void writeInputStreamToFile(InputStream inputStream, String fileName) throws IOException {
        OutputStream outputStream = new FileOutputStream(new File(fileName));
        int bytesRead = 0;
        byte[] buffer = new byte[1024];
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.close();
    }
}

在上述代码中,我们使用了HttpGet请求下载了一个CSV文件,该文件的URL地址为:https://example.com/data.csv,将下载的CSV文件保存到了本地的文件中,文件名为:data.csv。

总结:以上是使用Java及HttpClient实现文件下载的完整攻略及两个示例说明。在实际项目中,HttpClient可以支持证书、代理、cookies、连接池等功能,使得实现更加强大和灵活。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java使用HttpClient实现文件下载 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • google视频搜索

    Google 视频搜索攻略 Google是一个强大的搜索引擎,它可以帮助我们找到各种类型的信息,包括视频。在本攻略中,我们将详细介绍如何使用Google搜索。 步骤1:打开Google搜索 首先我们需要打开Google搜索。你可以在浏览器中输入www.google.com,然后按回键来打开Google搜索。 步骤2:输入搜索关键词 接下来,我们需要输入搜索关…

    other 2023年5月9日
    00
  • 苹果mac修改用户名与密码的方法 苹果电脑如何修改开机密码

    修改用户名的方法 步骤一:打开“偏好设置” 点击屏幕左上角的苹果图标,选择“偏好设置”选项进入系统设置菜单。 步骤二:选择“用户与群组” 在偏好设置中选择“用户与群组”选项,进入用户管理菜单。 步骤三:解锁修改 如果你的用户账户已被锁定,则需要在左下角通过管理员账户密码解锁,才能继续操作。 步骤四:点击“编辑”按钮 在用户列表中选择你要修改的账户名称,然后点…

    other 2023年6月27日
    00
  • C++实现LeetCode(86.划分链表)

    C++实现LeetCode(86.划分链表)完整攻略 问题描述 给定一个链表和一个特定值$x$,对于链表中的所有小于$x$的节点,排列在大于或等于$x$的节点之前。同时保留链表节点的初始相对顺序。 例如,给定的链表是1->4->3->2->5->2, 给定的值是$3$。那么,目标答案是1->2->2->4-&g…

    other 2023年6月27日
    00
  • 使用springBoot项目配置文件位置调整到打包外

    下面我将为您详细讲解如何将Spring Boot项目的配置文件位置调整到打包外。 配置文件位置 在Spring Boot项目中,通常需要使用到application.properties或者application.yml等配置文件。如果直接将配置文件放在src/main/resources目录下,那么在打包时,配置文件将会被打包在jar或者war包中,无法直…

    other 2023年6月25日
    00
  • linux下实现web数据同步的四种方式(性能比较)

    下面是详细的攻略。 Linux下实现Web数据同步的四种方式(性能比较) 在Linux下实现Web数据同步有多种方式。本文将介绍四种常见的方法,并对它们的性能进行比较。 1. Rsync Rsync是一个强大的命令行工具,用于在本地和远程之间进行数据同步。它能够通过SSH协议实现远程同步。下面是一个简单的示例,用于将本地目录/var/www/html同步到远…

    other 2023年6月27日
    00
  • 电脑主机启动不了怎么办 按了开机按钮无反应解决方法

    电脑主机启动不了怎么办-按了开机按钮无反应 当我们按下电脑开机按钮后,主机没有反应,没有任何动静,这时候该怎么办呢? 检查电源线 首先我们需要检查的是电源线是否正常连接到了主机,有时候电源线可能会松动,导致电源无法正常供电。此时需要将电源线重新插拔一遍,确保连接良好。 检查电源开关 如果电源线连接正常,还是无法启动,可能是电源开关出现问题。我们可以先尝试使用…

    other 2023年6月27日
    00
  • 2.4 小白必看:零基础安装Linux系统(超级详细)

    2.4 小白必看:零基础安装Linux系统(超级详细) 如果您是一名对Linux系统完全不了解的小白,不要担心!本文将提供超级详细的步骤和说明,帮助您轻松安装Linux系统。 选择Linux发行版 首先,您需要选择一个Linux发行版。这是因为Linux有很多不同的版本,也称为“发行版”,每个版本都适合不同的用户需求。此外,每个Linux发行版都有其独特的界…

    其他 2023年3月28日
    00
  • Android socket实现原理详解 服务端和客户端如何搭建

    关于“Android socket实现原理详解 服务端和客户端如何搭建”的攻略,我会给你一个完整的解释和示例。 什么是Socket? Socket是一个抽象概念,它通常被用来指代一个网络连接的端点,它是计算机之间进行通信的一种方式。在Socket通信中,通常分为服务端和客户端两部分,服务端负责监听并处理客户端的请求,而客户端则负责连接并发送请求给服务端。 A…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部