温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java网络下载如何实现

发布时间:2026-10-03 15:31:59 来源:亿速云 阅读:83 作者:小樊 栏目:编程语言

在 Java 中实现网络文件下载,常见方式有以下几种,从简单到专业逐步说明。


一、最基础方式:URL + URLConnection(JDK 原生)

适合简单下载,不依赖第三方库。

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

public class SimpleDownload {
    public static void main(String[] args) throws IOException {
        String fileUrl = "https://example.com/test.jpg";
        String savePath = "D:/test.jpg";

        URL url = new URL(fileUrl);
        URLConnection conn = url.openConnection();

        try (InputStream in = conn.getInputStream();
             FileOutputStream out = new FileOutputStream(savePath)) {

            byte[] buffer = new byte[8192];
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
        }
        System.out.println("下载完成");
    }
}

✅ 优点:无需依赖
❌ 缺点:功能有限(无超时、无重试、无进度)


二、推荐方式:HttpURLConnection(更可控)

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(10000);

int code = conn.getResponseCode();
if (code == 200) {
    // 下载逻辑同上
}

✅ 可设置超时、请求头
✅ 适合大多数场景


三、现代方式:Java 11+ HttpClient(推荐)

Java 11 自带 HTTP 客户端,支持异步、HTTPS。

import java.net.http.*;
import java.net.URI;
import java.nio.file.*;

public class HttpClientDownload {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com/test.jpg"))
                .build();

        HttpResponse<Path> response = client.send(
                request,
                HttpResponse.BodyHandlers.ofFile(Paths.get("D:/test.jpg"))
        );

        System.out.println("状态码:" + response.statusCode());
    }
}

✅ 官方推荐
✅ 支持异步、HTTPS、流式


四、第三方库(实际项目常用)

1️⃣ Apache HttpClient

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
</dependency>

适合:

  • 复杂请求
  • 代理、Cookie、重试

2️⃣ OkHttp(非常流行)

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
</dependency>
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
        .url("https://example.com/test.jpg")
        .build();

try (Response response = client.newCall(request).execute()) {
    Files.write(Paths.get("D:/test.jpg"),
            response.body().bytes());
}

✅ 简洁、性能好
✅ Android / 后端都常用


五、下载进度 & 断点续传(进阶)

进度监听

long total = conn.getContentLength();
long downloaded = 0;

while ((len = in.read(buf)) != -1) {
    out.write(buf, 0, len);
    downloaded += len;
    System.out.println(downloaded * 100 / total + "%");
}

断点续传(Range)

Range: bytes=1024-

六、选型建议

场景 推荐
学习 / 简单工具 URL / HttpURLConnection
Java 11+ 项目 HttpClient
企业级 / 复杂网络 OkHttp / Apache
Android OkHttp

如果你愿意,我可以:

  • ✅ 写一个完整可运行示例
  • ✅ 支持多线程下载
  • ✅ 支持断点续传
  • ✅ 适配 Spring Boot

你打算用在什么场景?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手