当前位置:首页 > Java

java 如何下载文件

2026-03-03 14:12:25Java

使用 Java 下载文件的方法

使用 java.net.URLjava.nio.file.Files

通过 URL 类打开连接,并使用 Files.copy 方法将数据流写入本地文件。

java 如何下载文件

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FileDownloader {
    public static void downloadFile(String fileUrl, String savePath) throws IOException {
        URL url = new URL(fileUrl);
        try (InputStream in = url.openStream()) {
            Files.copy(in, Paths.get(savePath));
        }
    }
}

使用 HttpURLConnection 处理 HTTP 请求

对于需要设置请求头或处理 HTTP 响应的场景,HttpURLConnection 更灵活。

java 如何下载文件

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpDownloader {
    public static void downloadFile(String fileUrl, String savePath) throws IOException {
        URL url = new URL(fileUrl);
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setRequestMethod("GET");

        try (InputStream in = httpConn.getInputStream();
             FileOutputStream out = new FileOutputStream(savePath)) {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
        }
    }
}

使用 Apache HttpClient 库

第三方库如 HttpClient 提供更高级的功能,适合复杂场景。

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.FileOutputStream;
import java.io.InputStream;

public class ApacheHttpDownloader {
    public static void downloadFile(String fileUrl, String savePath) throws Exception {
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpGet request = new HttpGet(fileUrl);
            try (CloseableHttpResponse response = client.execute(request)) {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    try (InputStream in = entity.getContent();
                         FileOutputStream out = new FileOutputStream(savePath)) {
                        byte[] buffer = new byte[4096];
                        int bytesRead;
                        while ((bytesRead = in.read(buffer)) != -1) {
                            out.write(buffer, 0, bytesRead);
                        }
                    }
                }
            }
        }
    }
}

使用 Java 11 的 HttpClient(JDK 内置)

Java 11 引入了新的 HttpClient API,支持异步和非阻塞操作。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;

public class Java11HttpDownloader {
    public static void downloadFile(String fileUrl, String savePath) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(fileUrl))
                .build();
        client.send(request, HttpResponse.BodyHandlers.ofFile(Path.of(savePath)));
    }
}

注意事项

  1. 异常处理:确保捕获 IOException 或其他可能的异常,避免程序崩溃。
  2. 大文件下载:对于大文件,使用缓冲区和分块读写以提高效率。
  3. HTTPS 支持:若下载 HTTPS 链接,需确保 JVM 信任证书或配置 SSL 上下文。
  4. 进度监控:可通过计算已下载字节数与总文件大小的比例实现进度显示。

示例调用

public class Main {
    public static void main(String[] args) {
        try {
            FileDownloader.downloadFile("http://example.com/file.zip", "downloaded.zip");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

分享给朋友:

相关文章

vue实现文件预览

vue实现文件预览

Vue 实现文件预览的方法 文件预览功能通常涉及图片、PDF、Office文档等多种格式的处理。以下是几种常见文件类型的实现方案: 图片预览 使用 <input type="file">…

vue实现文件分享

vue实现文件分享

Vue 实现文件分享功能 前端文件上传与展示 使用 Vue 和 Element UI 实现文件上传组件,允许用户选择文件并上传到服务器。 <template> <div>…

vue实现文件预览功能

vue实现文件预览功能

实现文件预览功能的方法 在Vue中实现文件预览功能可以通过多种方式完成,具体取决于文件类型和需求。以下是几种常见的实现方法: 图片预览 对于图片文件,可以使用HTML5的FileReader API…

vue实现文件拖拽下载

vue实现文件拖拽下载

Vue 实现文件拖拽下载 在 Vue 中实现文件拖拽下载功能,可以通过监听拖拽事件、处理文件数据并触发下载逻辑完成。以下是具体实现方法: 拖拽区域设置 创建一个可拖拽的区域,通常是一个 <di…

vue文件下载实现方式

vue文件下载实现方式

vue文件下载实现方式 使用a标签下载 通过创建a标签并设置download属性实现文件下载。适用于已知文件URL或Blob对象的情况。 // 方法1: 直接使用URL const down…

react如何打开文件

react如何打开文件

使用文件输入元素 在React中打开文件通常通过HTML的<input type="file">元素实现。创建一个受控组件,通过onChange事件获取用户选择的文件。 import R…