当前位置:首页 > Java

java如何下载文件

2026-03-03 14:18:10Java

使用 HttpURLConnection 下载文件

HttpURLConnection 是 Java 标准库中用于 HTTP 请求的类,适合简单的文件下载需求。

创建 URL 对象并打开连接:

URL url = new URL("http://example.com/file.zip");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");

设置连接参数并获取输入流:

connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
InputStream inputStream = connection.getInputStream();

创建输出流并写入文件:

FileOutputStream outputStream = new FileOutputStream("local_file.zip");
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
}

关闭资源:

outputStream.close();
inputStream.close();
connection.disconnect();

使用 Apache HttpClient 下载文件

Apache HttpClient 提供更高级的 HTTP 客户端功能,适合复杂的下载场景。

添加 Maven 依赖:

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

创建 HttpClient 并执行请求:

CloseableHttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet("http://example.com/file.zip");
CloseableHttpResponse response = client.execute(request);

处理响应并保存文件:

HttpEntity entity = response.getEntity();
if (entity != null) {
    try (FileOutputStream out = new FileOutputStream("local_file.zip")) {
        entity.writeTo(out);
    }
}

释放资源:

response.close();
client.close();

使用 Java NIO 下载文件

Java NIO 提供更高效的文件传输方式,适合大文件下载。

创建 URL 和 Path 对象:

URL url = new URL("http://example.com/file.zip");
Path path = Paths.get("local_file.zip");

使用 Files.copy 方法下载:

try (InputStream in = url.openStream()) {
    Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);
}

处理下载进度显示

需要显示下载进度时,可以自定义输入流包装器:

class ProgressInputStream extends FilterInputStream {
    private long totalRead = 0;
    private final long totalSize;

    protected ProgressInputStream(InputStream in, long totalSize) {
        super(in);
        this.totalSize = totalSize;
    }

    @Override
    public int read(byte[] b, int off, int len) throws IOException {
        int bytesRead = super.read(b, off, len);
        if (bytesRead > 0) {
            totalRead += bytesRead;
            System.out.printf("下载进度: %.2f%%%n", (totalRead * 100.0 / totalSize));
        }
        return bytesRead;
    }
}

处理 HTTPS 下载

对于 HTTPS 下载,需要配置 SSL 上下文:

java如何下载文件

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}}, new SecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);

分享给朋友:

相关文章

vue实现静态文件下载

vue实现静态文件下载

实现静态文件下载的方法 在Vue项目中实现静态文件下载可以通过多种方式完成,以下是几种常见的方法: 使用<a>标签下载 将静态文件放置在项目的public目录下,通过<a>…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

vue文件底层实现

vue文件底层实现

Vue 文件的底层实现 Vue 单文件组件(SFC,即 .vue 文件)的底层实现依赖于 Vue 的编译工具链,主要包括 @vue/compiler-sfc 和构建工具(如 Vite 或 Webpac…

vue实现文件功能

vue实现文件功能

Vue 实现文件上传功能 使用 Vue 实现文件上传功能可以通过原生 HTML 的 <input type="file"> 结合 Vue 的事件处理和 HTTP 请求库(如 Axios)来…

vue 实现文件地址

vue 实现文件地址

Vue 实现文件下载功能 在Vue中实现文件下载功能通常可以通过前端直接触发下载或通过后端API返回文件流。以下是几种常见方法: 前端直接下载(适用于公开URL) 对于已知的公开文件URL,可以直接…

vue实现文件管理系统

vue实现文件管理系统

Vue 文件管理系统实现方案 核心功能模块设计 文件展示组件:使用树形结构展示目录层级,配合递归组件实现无限嵌套 上传下载功能:通过axios与后端API交互,支持拖拽上传和分片上传 权限控制系统:基…