当前位置:首页 > 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();
        }
    }
}

分享给朋友:

相关文章

css文件怎么制作

css文件怎么制作

创建CSS文件的基本步骤 CSS文件用于定义网页的样式,可以与HTML文件分离,便于管理和维护。以下是创建CSS文件的方法: 新建文本文件 使用任意文本编辑器(如Notepad++、VS Code、…

旋转相册制作css文件

旋转相册制作css文件

旋转相册制作CSS文件 旋转相册通常通过CSS动画和3D变换实现,以下是一个完整的CSS文件示例,用于创建一个3D旋转相册效果。 基础HTML结构 在CSS文件之前,需确保HTML结构包含相…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…

vue中实现文件导入

vue中实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合Vue的事件处理完成。创建一个文件选择按钮,监听change事件获取用户选择的文件…