c语言编程笔录

首页 >   > 笔记大全

笔记大全

使用Java怎么实现批量下载

更新时间:2023-10-26

需求背景

批量下载是指一次性下载多个文件或多个网页的过程。在实际应用中,批量下载有很多场景,例如备份服务器上的文件、爬取网站内容等。接下来将介绍如何使用Java实现批量下载。

实现思路

批量下载的实现主要包括两个步骤:构造URL和下载文件。对于构造URL,需要提供文件路径或网页链接的列表。对于下载文件,可以使用Java提供的InputStream和OutputStream,通过读取网络输入流和写入本地文件输出流的方式,将需要下载的文件保存到本地。

代码实现

首先需要导入Java中用于URL构造和文件读写的相关库,可以使用以下代码实现:

import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

接下来,需要定义一个方法来实现批量下载。具体实现代码如下:

public static void batchDownload(List urls, String saveFolder) throws IOException {
  URL url;
  for (String fileUrl : urls) {
    url = new URL(fileUrl);
    String fileName = url.getFile().substring(url.getFile().lastIndexOf("/") + 1);
    InputStream in = url.openStream();
    FileOutputStream fos = new FileOutputStream(saveFolder + "/" + fileName);
    byte[] buffer = new byte[4096];
    int length = 0;
    while ((length = in.read(buffer)) > 0) {
      fos.write(buffer, 0, length);
    }
    in.close();
    fos.close();
  }
}

代码解释:

首先,参数urls是一个String类型的列表,用于提供需要下载的文件链接,参数saveFolder是需要将下载的文件保存到的本地文件夹。在方法中,首先通过循环遍历urls,利用Java中的URL类依次构造每个文件的URL。

for (String fileUrl : urls) {
  url = new URL(fileUrl);
  // other code
}

然后,如何通过URL读取网络输入流并且写入本地文件输出流的方式,将需要下载的文件保存到本地。调用inputStream.read(buffer)可以读取输入流中的内容,read()方法会返回下一个字节的int值,否则返回-1表示没有更多的内容可供读取。使用outputStream.write(byte[], offset, length)可以写入指定大小的字节。

InputStream in = url.openStream();
FileOutputStream fos = new FileOutputStream(saveFolder + "/" + fileName);
byte[] buffer = new byte[4096];
int length = 0;
while ((length = in.read(buffer)) > 0) {
  fos.write(buffer, 0, length);
}
in.close();
fos.close();

代码演示

最后,可以使用以下代码在本地文件夹中下载百度和谷歌首页的html文件:

List urls = new ArrayList<>();
urls.add("https://www.baidu.com");
urls.add("https://www.google.com");
batchDownload(urls, "D:/downloads");

运行上述代码后,将会在D盘的downloads文件夹中生成百度首页和谷歌首页的html文件:

下载文件效果图