java 实现下载

使用 Java 实现文件下载的全面指南 Java 提供了多种方式来实现 HTTP 文件下载,例如使用 HttpURLConnection 或第三方库(如 Apache HttpClient)。在 Java 中实现文件下载是一个常见的需求,尤其是在开发 Web 应用程序时。本文将详细介绍如何使用 Java 实现文件下载功能,涵盖从本地文件系统下载文件以及通过 HTTP 下载文件的两种场景。如果文件存储在本地文件系统中,可以通过 Java 的 InputStream 和 OutputStream 实现文件下载。 阅读详情

java 实现下载


Java实现HTTP文件下载
本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=226364

 


Java实现HTTP文件下载
序言

  许多用户可能会遇到这样的情况:在网站上发现一个很好的资源,但是这个资源是分成了很多个文件存放的,如果想把它保存到本地,只有靠用户点击另存来完成保存,如果资源分了几百甚至上千上万,那简直是个灾难。

  在Internet上很多的资源分成多个文件存放时,它的文件命名是有一定的规则的;正因如此,我们就可以用程序来完成这个资源的完全下载。

  1. 基础知识

  在Internet上,我们要下载网站上的某个资源,我们会获得一个URL(Uniform Resource Locator),它是一个服务器资源定位的描述,下载的过程总是如下步骤:

  步骤1:客户端发起连接请求一个URL

  步骤2:服务器解析URL,并将指定的资源返回一个输入流给客户

  步骤3:客户端接收输入流,将流中的内容存到文件

  2. 网络连接的建立

  Java提供了对URL访问和大量的流操作的的API,我们可以很容易的完成对网络上资源的存取,下面的代码段就完成了对一个网站的资源进行访问:

......
destUrl="http://www.ebook.com/java/网络编程001.zip";
url = new URL(destUrl);
httpUrl = (HttpURLConnection) url.openConnection();
//连接指定的网络资源
httpUrl.connect();
//获取网络输入流
bis = new BufferedInputStream(httpUrl.getInputStream());
......

  3. 代理的访问

  Java 中通过代理服务器访问外网的方法已经是世人皆知的秘密了。这里就不再多描述了,访问的JAVA代码如下:

//设置代理服务器
System.getProperties().put("proxySet", "true");
System.getProperties().put("proxyHost", "10.154.134.110");
System.getProperties().put("proxyPort", "8080");

  4. 网络资源的保存

  在上节中,我们已经获取了指定网络资源的输入流,接下来我们要完成的就是读取输入流中的所以内容,并将其保存在文件中。示例代码:

......
fos = new FileOutputStream(fileName);
if (this.DEBUG)
System.out.println("正在获取链接[" + destUrl + "]的内容.../n将其保存为文件[" + fileName +"]");

//保存文件
while ( (size = bis.read(buf)) != -1)
fos.write(buf, 0, size);
......

  上面的示例代码就将网络资源的内容保存到了本地指定的文件中。

  5. 代码清单
import java.io.*;
import java.net.*;
import java.util.*;
/**
* <p>Description: 将指定的HTTP网络资源在本地以文件形式存放</p>
**/
public class SaveFile {
    public final static boolean DEBUG = true; //调试用
    private static int BUFFER_SIZE = 8096; //缓冲区大小
    private Vector vDownLoad = new Vector(); //URL列表
    private Vector vFileList = new Vector(); //下载后的保存文件名列表
    /**
      * 构造方法
      */
    public SaveFile() {}
    /**
      * 清除下载列表
      */
    public void resetList() {
        vDownLoad.clear();
        vFileList.clear();
    }
    /**
      * 增加下载列表项
      *
      * @param url String
      * @param filename String
      */
    public void addItem(String url, String filename) {
        vDownLoad.add(url);
        vFileList.add(filename);
    }
    /**
      * 根据列表下载资源
      */
    public void downLoadByList() {
        String url = null;
        String filename = null;
//按列表顺序保存资源
        for (int i = 0; i < vDownLoad.size(); i++) {
            url = (String) vDownLoad.get(i);
            filename = (String) vFileList.get(i);
            try {
                saveToFile(url, filename);
            } catch (IOException err) {
                if (DEBUG) {
                    System.out.println("资源[" + url + "]下载失败!!!");
                }
            }
        }
        if (DEBUG) {
            System.out.println("下载完成!!!");
        }
    }
    /**
     * 将HTTP资源另存为文件
     *
     * @param destUrl String
     * @param fileName String
     * @throws Exception
     */
    public void saveToFile(String destUrl, String fileName) throws IOException {
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        HttpURLConnection httpUrl = null;
        URL url = null;
        byte[] buf = new byte[BUFFER_SIZE];
        int size = 0;
       
//建立链接
        url = new URL(destUrl);
        httpUrl = (HttpURLConnection) url.openConnection();
//连接指定的资源
        httpUrl.connect();
//获取网络输入流
        bis = new BufferedInputStream(httpUrl.getInputStream());
//建立文件
        fos = new FileOutputStream(fileName);
        if (this.DEBUG)
            System.out.println("正在获取链接[" + destUrl + "]的内容.../n将其保存为文件[" +
                               fileName + "]");
//保存文件
        while ((size = bis.read(buf)) != -1)
            fos.write(buf, 0, size);
        fos.close();
        bis.close();
        httpUrl.disconnect();
    }

    /**
        * 将HTTP资源另存为文件
        *
        * @param destUrl String
        * @param fileName String
        * @throws Exception
        */
       public void saveToFile2(String destUrl, String fileName) throws IOException {
           FileOutputStream fos = null;
           BufferedInputStream bis = null;
           HttpURLConnection httpUrl = null;
           URL url = null;
           byte[] buf = new byte[BUFFER_SIZE];
           int size = 0;  
  
//建立链接
           url = new URL(destUrl);
           httpUrl = (HttpURLConnection) url.openConnection();
      
//           String authString = "username" + ":" + "password";
            String authString = "50301" + ":" + "88888888";
           String auth = "Basic " +
                         new sun.misc.BASE64Encoder().encode(authString.getBytes());
           httpUrl.setRequestProperty("Proxy-Authorization", auth);
      
//连接指定的资源
           httpUrl.connect();
//获取网络输入流
           bis = new BufferedInputStream(httpUrl.getInputStream());
//建立文件
           fos = new FileOutputStream(fileName);
  
           if (this.DEBUG)
               System.out.println("正在获取链接[" + destUrl + "]的内容.../n将其保存为文件[" +
                                  fileName + "]");
//保存文件
           while ((size = bis.read(buf)) != -1)
               fos.write(buf, 0, size);
  
           fos.close();
           bis.close();
           httpUrl.disconnect();
       }
    /**
     * 设置代理服务器
     *
     * @param proxy String
     * @param proxyPort String
     */
    public void setProxyServer(String proxy, String proxyPort) {
//设置代理服务器
        System.getProperties().put("proxySet", "true");
        System.getProperties().put("proxyHost", proxy);
        System.getProperties().put("proxyPort", proxyPort);
    }
    public void setAuthenticator(String uid, String pwd) {
        Authenticator.setDefault(new MyAuthenticator());
    }
    /**
    * 主方法(用于测试)
    *
    * @param argv String[]
    */
    public static void main(String argv[]) {
    HttpGet oInstance = new HttpGet();
   try {
//    //增加下载列表(此处用户可以写入自己代码来增加下载列表)
//   oInstance.addItem("http://www.~~~.com/java/网络编程001.zip","./网络编程1.zip");//
//     oInstance.addItem("http://www.~~~.com/java/网络编程002.zip","./网络编程2.zip");
//     oInstance.addItem("http://www~~~.com/java/网络编程003.zip","./网络编程3.zip");
//     //开始下载
//     oInstance.downLoadByList();
     oInstance.saveToFile("http://www~~~.com/java/网络编程001.zip", "./down.zip");
   }
    catch (Exception err) {
    System.out.println(err.getMessage());
    }
    }
本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=226364

 

Java下载文件到本地的多种方式 使用okhttp下载,需要引入。 阅读详情

相关推荐

Java实现HTTP文件下载

Java实现HTTP文件下载

JAVA用http协议实现简单文件下载

用http协议实现一个简单的网络资源下载文件! 研究大文件断点传输的时候,梳理自己的思路,写了一个http协议的文件下载的demo,非常简单,但是能够实现! 上代码: public class FileDown { InputStream inputStream; public void Filee(){ try { //新建URL对象 ...

小轩的名古屋 4714

基于AutoDL复现A-LOAM

Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographer中被大量使用。在autodl上面租服务器,地区我租的重庆A区的,GPU我选择的是RTX4090,基础镜像选择的是Miniconda / conda3 / 3.8(ubuntu20.04)/11.6。在AutoDL中我使用的方式是先将该数据集先下载到自己的电脑上,然后再上传到虚拟机中。用MobaXterm解决该问题!搜到的一个解决方式:该问题属于ceres版本问题,将A-LOAM下的。

m0_61281610的博客 1943

JAVA通过HTTP协议下载网络文件

分享一个通过原生的Java代码下载网络资源文件方法,使用URL类连接上网络服务器通过多线程使用I/O流的方式下载文件。

m0_60499221的博客 6138

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

【CADARXC++】ObjectArx2023 C++ CAD二次开发环境配置笔记

从官网或第三方平台下载以下AUtoCAD2023、VisualStudio2019和ObjectArx2023安装时请注意安装顺序。

BIMCATIA的博客 1790

java实现word/pdf下载

在SpringMVC的开发过程中,有时需要实现文档的下载功能。文档的下载功能涉及到了java IO流操作的基础知识,下面本文详细介绍java如何实现后台文档下载功能。 首先根据文档在项目中的存储路径建立File对象,并获取文档的名称和后缀。判断浏览器类型,防止中文文件名出现乱码。 File file=new File(path); String fileN...

阿文的博客 374

别再套用星形公式了!三角形接法PMSM的FOC控制,扇区判断与作用时间推导全解析

本文深入解析三角形接法永磁同步电机(PMSM)的FOC控制技术,重点探讨30度相位差对SVPWM扇区判断与电压矢量作用时间的影响。通过数学推导与实验验证,详细讲解修正后的扇区划分规则、作用时间计算公式优化方法,并提供可直接移植到STM32的代码实现,帮助工程师解决三角形接法特有的相电流重构与同步采样难题。

weixin_30689307的博客 470

Java实现文件下载功能

前言 上一篇介绍了文件上传,传送门:Java实现文件上传功能,这次简单介绍一下文件下载功能 实现思路 文件下载简单来说就是在读取文件的基础上多了一层与HTTP的通信,因此流程的改变如下: 原:与计算机文件系统交互 现:与HTTP通信交互→与计算机文件系统交互 实现代码 重点会写在注释中,下面直接贴代码 1、业务层 (省略类的代码,此处只有方法) public void down...

rtdrydry的博客 7394

宇树机器狗go2—slam建图(1)点云格式

上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目来进行不定期更新,仿真不只限于在gazebo上实现,后面还会在isaac sim等仿真平台上教大家如何搭建,其目的还是帮助各位都能以较低的成本加入到宇树机器狗go2的学习中。

古月居 3273

uniapp - 详细解决 H5 网页报错 Uncaught Error: Async component timed out after ? ms.(移动端h5页面白屏或加载缓慢失败,超时报错处理)

uni-app,vue3,网页,h5,移动端,手机H5页面,浏览器,报错,uniapp报错,Asynccomponenttimedoutafter,如何解决这个问题,vue3Asynccomponenttimedoutafter,异步组件超时了怎么办,async,详细解决方案,AsyncComponents异步组件,导致页面打不开了,白屏什么也不显示,网页载入非常慢卡顿,vue3网站报错,超时,nuxt3,详细解决方案,浏览器控制台报错,爆红并且页面卡住了,依旧报错,找不到异步组件的报错

🏆 前端领域优质创作者 3779

java下载实现_java 实现下载功能

/*** 下载文件* @param filePath --文件完整路径* @param response --HttpServletResponse对象*/public static void downloadFile(String filePath,javax.servlet.http.HttpServletResponse response) {String fileName = ""; //...

weixin_42300956的博客 694

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 374

java实现文件下载

原理是使用java.io中的File类打开要下载的文件,用输入流将文件读入系统,再将response中的输出流连接到系统,通过输入流和输出流进行文件下载。 在response的响应头中设置下载文件的文件名 /** * 下载文件 * @param fileId 文件ID * @param session * @param request * @par...

贪吃小明的博客 2万+

一分钟理解 “熔断“, “限流“ 与 “降级“

熔断,本质是一种“故障隔离”机制,用于当某个依赖服务出现持续故障(如响应超时、错误率飙升)时,暂时切断对该服务的调用,避免故障扩散到整个系统,防止“雪崩效应”;待依赖服务恢复正常后,再逐步恢复调用。其核心逻辑参考了现实中的“电路保险丝”——电路过载时,保险丝熔断,切断电路,保护电器不被烧毁;故障排除后,更换保险丝,电路恢复正常。闭合状态(Closed):正常状态,请求可以正常调用依赖服务,同时监控调用的错误率、超时率等指标。打开状态(Open)

h a 6 6 6 c k 为 你解决复杂难题! 1483

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java实现word下载_java中如何实现下载word功能

对于word以及excel我并没有多少好感,但是今天工作需要不得不去亲近它了,但是后来发现这个就像人们的关系一样,你亲近它,它就亲近你。好了,废话不多说了,咱们就来看看,到底是怎样实现这个下载的。我们的项目,是将word放到了项目中,所以就是一个死路径,我们只需要去读这个路径就可以了,所以前台不许多说,只需要传过来路径,去调用后台方法即可。我们就来看看后台。public void download...

weixin_35968523的博客 3718

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

实现文件下载的java代码

实现文件下载的java代码//这是实现下载类(servlet),具体思路代码如下://也可连接数据库package com.message;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class FileDownServlet extends

8万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA 实现 HTTP文件下载

需求: 在工程中,放置WORD模板文件供用户下载 功能:页面提供下载链接,用户点击链接后,实现文件下载。 理解:刚开始以为直接用超链接指向文件即可,或用js实现,后来发现都不行。 实现:最后在网上搜了一个实现HTTP文件下载的java类,只要调用如下代码即可。 下面代码放在request经过的地方都可以,如servlet,struts的action或jsp页面。 basePath =

yangsen251024的专栏 2499

JAVA代码实现SFTP文件下载

JAVA代码实现SFTP文件下载

smallpig的专栏 2万+

java下载文件_java实现文件下载的两种方式

本文实例为大家分享了java实现文件下载的具体代码,供大家参考,具体内容如下public HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件的路径。File file = new File(path);// 取得文件名。String filename = file...

weixin_42370345的博客 2346

java实现图片文件上传下载_java实现文件的上传和下载

1、servlet 如何实现文件的上传和下载?1.1上传文件参考自:http://blog.youkuaiyun.com/hzc543806053/article/details/7524491通过前台选择文件,然后将资源上传到(即新建一个文件)到发布的资源文件下面,下载就是url 到发布的资源文件,触发即可自动下载。服务器已经封装了如何下载的底层实现。(此处用的是tomcat)JSP上传文件方法:关于在H...

weixin_42398171的博客 3015

附件下载java实现_Java实现文件下载

package com.rong.servlet;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax....

weixin_39640767的博客 1554

java实现文件上传与下载

欢迎大家访问我的博客:地址 感谢:孤傲苍狼,JavaWeb学习总结(五十)——文件上传和下载 JAVA中文件上传下载知识点整理, 东风化宇,文件上传 一、对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦。 JSP代码,POST请求,表单必须设置...

小团团的专栏 2万+

用JAVA代码实现下载网络上的资源

java代码实现下载功能

Zonzereal的博客 7165

java下载功能实现,java实现文件下载功能代码

import java.io.BufferedOutputStream;import java.io.OutputStream;import java.net.URLEncoder;import javax.servlet.http.HttpServletResponse;/*** java实现文件下载功能代码* 创建时间:2014年12月23日* @version*/public class...

weixin_32443035的博客 337
上一篇: 实现文件下载的java代码
下一篇: Struts标签与JavaScript客户端验证问题
AngleKill
博客等级 码龄18年 20粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值