Java 从网上下载文件的几种方式实例代码详解

Java 从网上下载文件的几种方式实例代码详解

在Java编程中,有时候需要从网上下载文件,比如下载图片、音频、视频等资源文件。本文将详细讲解Java 从网上下载文件的几种方式,希望可以帮助大家实现这个需求。

1.使用URL类下载文件

使用URL类可以轻松地实现从网上下载文件。实现的过程如下:

public static void downloadFile(String urlString, String savePath) throws IOException {
    URL url = new URL(urlString);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setConnectTimeout(5000);
    InputStream inputStream = conn.getInputStream();
    byte[] getData = readInputStream(inputStream);

    File file = new File(savePath);
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    fileOutputStream.write(getData);
    fileOutputStream.close();
    inputStream.close();
}

private static byte[] readInputStream(InputStream inputStream) throws IOException {
    byte[] buffer = new byte[1024];
    int len;
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    while ((len = inputStream.read(buffer)) != -1) {
        byteArrayOutputStream.write(buffer, 0, len);
    }
    byteArrayOutputStream.close();
    return byteArrayOutputStream.toByteArray();
}

其中,downloadFile函数用于下载文件,输入参数有urlString和savePath,分别表示下载的资源文件URL和本地存储路径。

2.使用Apache的HttpClient类下载文件

另一种从网上下载文件的方式是使用Apache的HttpClient类。具体实现过程如下:

public static void downloadFile(String urlString, String savePath) throws IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpGet httpGet = new HttpGet(urlString);
    CloseableHttpResponse response = client.execute(httpGet);

    HttpEntity entity = response.getEntity();
    InputStream inputStream = entity.getContent();
    byte[] getData = readInputStream(inputStream);

    File file = new File(savePath);
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    fileOutputStream.write(getData);
    fileOutputStream.close();

    entity.getContent().close();
    response.close();
}

private static byte[] readInputStream(InputStream inputStream) throws IOException {
    byte[] buffer = new byte[1024];
    int len;
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    while ((len = inputStream.read(buffer)) != -1) {
        byteArrayOutputStream.write(buffer, 0, len);
    }
    byteArrayOutputStream.close();
    return byteArrayOutputStream.toByteArray();
}

HttpClient需要引入以下两个依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.3</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.6</version>
</dependency>

示例

假设我们需要从百度首页下载百度logo。那么可以使用以下代码:

String url = "https://www.baidu.com/img/baidu_jgylogo3.gif";
String savePath = "/Users/work/desktop/baidu_jgylogo3.gif";

// 使用URL类下载文件
DownloadUtil.downloadFile(url, savePath);

// 使用HttpClient下载文件
DownloadUtil.downloadFile(url, savePath);

在实际编程中,我们只需要根据实际需求替换url和savePath参数即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 从网上下载文件的几种方式实例代码详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java9新特性Reactive Stream响应式编程 API

    Java 9 增加了 Reactive Stream 响应式编程 API,使得开发者能够更方便地实现响应式编程。本文将详细解释 Reactive Stream API 的用法,并提供示例代码来说明。 Reactive Stream 简介 Reactive Stream 是一种用于异步编程的编程模型,它能够处理大数据流和异步操作。Reactive Stream…

    Java 2023年5月26日
    00
  • Java基础知识精通二维数组的应用

    关于“Java基础知识精通二维数组的应用”的完整攻略,我将详细介绍如下: 一、了解什么是二维数组 在Java中,二维数组是指由多个一维数组组成的数组,每个一维数组又包含多个元素,相当于一个表格或矩阵。 二维数组的定义格式如下: 类型[][] 数组名 = new 类型[行数][列数]; 例如: int[][] arr = new int[3][2]; //定义…

    Java 2023年5月26日
    00
  • JSP防止网页刷新重复提交数据的几种方法

    当使用JSP开发Web应用程序时,我们经常需要防止用户在刷新网页时重复提交表单,以免造成数据异常和重复提交的问题。以下是几种防止网页刷新重复提交数据的方法: 1. 后端验证防止重复提交 在用户提交表单后,在后端需要进行以下验证: 生成并存储一个唯一的 token,当用户提交表单时,将 token 设置为 session 或者隐藏字段; 再次提交时,验证表单提…

    Java 2023年6月15日
    00
  • Spring MVC中的Controller进行单元测试的实现

    在 Spring MVC 中,Controller 是处理 HTTP 请求的核心组件。为了确保 Controller 的正确性,我们需要对其进行单元测试。本文将详细讲解如何在 Spring MVC 中对 Controller 进行单元测试的实现。 1. 单元测试环境搭建 在进行单元测试之前,我们需要先搭建好测试环境。下面是一个简单的示例,演示了如何使用 JU…

    Java 2023年5月18日
    00
  • Spring Boot修改内置Tomcat默认端口号的示例

    请听我详细讲解 “Spring Boot修改内置Tomcat默认端口号的示例”的完整攻略。 一、Spring Boot如何修改Tomcat默认端口号 Spring Boot作为一种快速开发框架,其内置了Tomcat作为默认的Web容器。而默认的端口号是8080端口,但有时候需要把它修改为其他端口号。如何修改呢? 在Spring Boot中修改Tomcat默认…

    Java 2023年5月19日
    00
  • 详解HTTP请求与响应基础及实例

    详解HTTP请求与响应基础及实例 HTTP是一种用于网络传输的协议,它定义了客户端和服务器之间进行通信的规则。在HTTP通信过程中,客户端向服务器发送请求,服务器则对请求进行处理并返回响应,由此构成了HTTP请求和响应的基础。 HTTP请求 HTTP请求由三部分构成:请求行、请求头和请求体。其中,请求行包含请求的方法、URI和HTTP版本号,请求头包含了请求…

    Java 2023年5月20日
    00
  • 简单实例处理url特殊符号&处理(2种方法)

    处理URL中的特殊符号 & 是一个常见的问题,因为 & 符号在URL中有特殊的含义,它被用来分隔参数,不处理它可能会导致URL解析错误。本文将介绍两种方法来处理URL中的 & 字符。 方法一:使用urlencode()函数 urlencode()函数是PHP中一个非常有用的函数,主要用于将一个字符串转换为URL安全的字符串。在将一个含…

    Java 2023年5月20日
    00
  • SpringBoot使用JdbcTemplate访问操作数据库基本用法

    SpringBoot使用JdbcTemplate访问操作数据库基本用法 简介 JdbcTemplate 是 Spring 框架提供的一种基于 JDBC 的访问数据库的工具,使用它可以简化 JDBC 的开发流程和操作,减少大量模板式代码的编写。结合 SpringBoot 使用 JdbcTemplate 可以更加方便地访问和操作数据库。 Maven 依赖 在 S…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部