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:下载失败