Java 批量从网上下载文件
在日常的开发中,我们经常需要从网上下载文件,比如下载图片、音频、视频等资源。如果只是下载少量文件,手动一个一个下载可能还可以接受,但如果需要批量下载大量文件,那么手动操作就明显不够高效了。本文将介绍使用 Java 编程语言批量从网上下载文件的方法,并提供相应的代码示例。
HttpURLConnection 类的使用
Java 提供了 java.net
包,其中的 HttpURLConnection
类可以用于发送 HTTP 请求,并获取服务器的响应。我们可以利用这个类来下载文件。下面是一个简单的示例代码:
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class FileDownloader {
public static void downloadFile(String fileUrl, String savePath) {
try {
URL url = new URL(fileUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
FileOutputStream fileOutputStream = new FileOutputStream(savePath);
int bytesRead;
byte[] buffer = new byte[4096];
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
fileOutputStream.close();
bufferedInputStream.close();
connection.disconnect();
System.out.println("文件下载完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileUrl = "
String savePath = "C:/Downloads/example.jpg";
downloadFile(fileUrl, savePath);
}
}
在上述代码中,我们定义了一个 FileDownloader
类,其中的 downloadFile
方法接收两个参数:fileUrl
表示需要下载的文件的 URL,savePath
表示下载后保存的路径。该方法通过创建 URL
对象和 HttpURLConnection
对象来与服务器建立连接,并发送 GET 请求获取服务器的响应。然后,通过输入流和输出流来实现文件的下载。最后,关闭输入流、输出流和连接对象,并输出下载完成的提示信息。
批量下载文件
如果需要批量下载文件,我们可以在程序中使用循环来反复调用 downloadFile
方法。下面是一个示例代码,演示如何批量下载文件:
import java.util.ArrayList;
import java.util.List;
public class BulkFileDownloader {
public static void main(String[] args) {
List<String> fileUrls = new ArrayList<>();
fileUrls.add("
fileUrls.add("
fileUrls.add("
String savePath = "C:/Downloads/";
for (String fileUrl : fileUrls) {
String fileName = getFileNameFromUrl(fileUrl);
String filePath = savePath + fileName;
FileDownloader.downloadFile(fileUrl, filePath);
}
}
private static String getFileNameFromUrl(String fileUrl) {
String[] parts = fileUrl.split("/");
return parts[parts.length - 1];
}
}
在上述代码中,我们定义了一个 BulkFileDownloader
类,其中的 main
方法首先创建一个包含多个文件 URL 的 fileUrls
列表。然后,使用循环遍历 fileUrls
列表,并通过调用 FileDownloader.downloadFile
方法来下载每个文件。注意,为了让下载的文件保存到不同的路径,我们使用 getFileNameFromUrl
方法从文件 URL 中提取文件名,并将其与保存路径拼接成完整的文件路径。
状态图
为了更好地理解下载文件的过程,下面是一个状态图,展示了下载文件时可能遇到的不同状态:
stateDiagram
[*] --> NotStarted
NotStarted --> Downloading : Start Download
Downloading --> Paused : Pause Download
Downloading --> Completed : Download Complete
Downloading --> Failed : Download Failed
Downloading --> Cancelled : Download Cancelled
Paused --> Downloading : Resume Download
Paused --> Cancelled : Cancel Download
Completed --> [*] : Finish
Failed --> [*] : Finish
Cancelled --> [*] : Finish
状态图中包含以下几个状态:
NotStarted
:未开始下载Downloading
:正在下载Paused
:下载暂停Completed
:下载完成Failed
:下载失败