使用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(Listurls, 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文件:
Listurls = new ArrayList<>(); urls.add("https://www.baidu.com"); urls.add("https://www.google.com"); batchDownload(urls, "D:/downloads");
运行上述代码后,将会在D盘的downloads文件夹中生成百度首页和谷歌首页的html文件: