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日

相关文章

  • servlet实现图片上传功能

    下面我来为你讲解如何使用servlet实现图片上传功能的完整攻略。 1. 准备工作 首先,我们需要在web项目中添加commons-fileupload和commons-io两个jar包。这两个包是实现文件上传必不可少的工具包,它们可以在apache的官网上下载到。 2. 自定义servlet 我们需要自定义一个servlet来实现上传图片的功能,具体实现就…

    Java 2023年6月15日
    00
  • Spring+SpringMVC+MyBatis整合详细教程(SSM)

    以下是关于“Spring+SpringMVC+MyBatis整合详细教程(SSM)”的完整攻略,其中包含两个示例。 1. 前言 Spring+SpringMVC+MyBatis整合(简称SSM)是一种常用的Java Web开发框架,它将Spring、SpringMVC和MyBatis三个框架整合在一起,提供了一种灵活的方式来开发Web应用程序。本攻略将详细讲…

    Java 2023年5月16日
    00
  • JavaScript实现留言板添加删除留言

    下面是“JavaScript实现留言板添加删除留言”的完整攻略: 1. 创建HTML页面结构 首先创建一个HTML文件,结构如下: <!DOCTYPE html> <html> <head> <title>留言板</title> </head> <body> <h1&g…

    Java 2023年6月15日
    00
  • struts2简介_动力节点Java学院整理

    Struts2简介 简介 Apache Struts 2 是一款基于 Java EE 的Web应用程序开发框架,它是Struts的后继者。Apache Struts 2 是一款基于MVC设计模式的框架。 特点 以下是Struts2的特点: Struts 2 是一个MVC框架,通过分离应用程序的模型、视图和控制器,为应用程序提供了松散耦合。 Struts 2跨…

    Java 2023年6月2日
    00
  • SpringBoot–Banner的定制和关闭操作

    关于SpringBoot的Banner定制和关闭操作,下面是我的攻略: 什么是Banner 在介绍Banner的定制和关闭操作之前,我们先来了解一下什么是Banner。在SpringBoot应用程序启动的时候,会输出一个默认的Banner,它是一张ascii字符组成的图案,可以设置不同的颜色、字体、大小等属性,用于展示应用程序的信息,例如名称、版本、版权信息…

    Java 2023年5月19日
    00
  • SpringSecurity rememberme功能实现过程解析

    下面我给你详细讲解“SpringSecurity rememberme功能实现过程解析”的完整攻略。 1. 简介 Spring Security是一个流行的安全框架,可以为Web应用程序提供身份验证和授权的服务。其中的rememberme功能可以帮助用户在登出后不必重新登录,便能够快速访问应用程序。其实现原理是利用cookie存储用户登录凭据并在下次登录时使…

    Java 2023年5月20日
    00
  • java中接口(interface)及使用方法示例

    下面详细讲解“Java中接口(interface)及使用方法示例”的完整攻略。 一、接口的概念 在 Java 中,接口就是一个抽象类型,它只包含抽象方法的定义。接口定义了一组方法,但没有给出方法的实现。其主要作用是描述类应该具有的功能,而不具体地提供实现。 接口定义的格式如下: public interface 接口名称 { // 抽象方法的定义 } 接口内…

    Java 2023年5月26日
    00
  • 使用Spring源码报错java:找不到类 InstrumentationSavingAgent的问题

    针对“使用Spring源码报错java:找不到类 InstrumentationSavingAgent的问题”,我们可以采取以下步骤进行排查和解决。 1. 确定报错原因 在编译或运行代码过程中,如果出现了类找不到的问题,有可能是因为该类被成功编译但在运行时无法被找到。针对这种情况,我们需要先明确报错原因。 通过查看报错提示信息,判断问题是否出在Spring源…

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