java的断点下载,java文件下载断点续传

本文目录一览:

java 断点续传需要哪些jar包

Java–实现断点续传(下载)

— 断点续传: 就像迅雷下载文件一样,停止下载或关闭程序,下次下载时是从上次下载的地方开始继续进行,而不是重头开始…

— RandomAccessFile — pointer(文件指针) — seek(移动文件指针) — 断点续传

package com.dragon.java.downloadfile;

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

/*

断点续传:对下载软件非常重要!

— 第一次下载 100 字节

— 第二次下载 101 字节…想办法知道上次从哪个地方断掉的。 上次已经下载到了什么位置。 记下断点的位置

—— 需要第三方的文件专门记住断点的位置

*/

public class Test {

public static void main(String args[]) {

File srcFile = new File(“D:/Java4Android/01_Java考古学/01_Java考古学.mp4”);

File desDir = new File(“f:/vidio”);

copyFileToDir(srcFile, desDir);

}

public static void copyFileToDir(File srcFile, File desDir) {

desDir.mkdirs();

// 创建配置文件

File configFile = new File(desDir, srcFile.getName().split(“\\.”)[0]

+ “.config”);

// 创建目标文件

File desFile = new File(desDir, srcFile.getName());

if (!configFile.exists() desFile.exists()) {

System.out.println(“已下载过该文件!”);

return;

}

RandomAccessFile rafSrc = null;

RandomAccessFile rafDes = null;

RandomAccessFile rafConfig = null;

try {

rafSrc = new RandomAccessFile(srcFile, “r”);

rafDes = new RandomAccessFile(desFile, “rw”);

rafConfig = new RandomAccessFile(configFile, “rw”);

// 设置目标文件和源文件一样长

rafDes.setLength(srcFile.length());

// 设置配置的文件长度为8,防止第一次下载是出现EOF 异常

rafConfig.setLength(8);

// 从上次下载的位置开始继续下载!

long pointer = rafConfig.readLong();

System.out.println(“已下载:” + ((float) pointer / srcFile.length())

* 100 + “%”);

rafSrc.seek(pointer);

rafDes.seek(pointer);

// 单次传输长度设置小点,好观察是否断点续传

byte[] buffer = new byte[32];

int len = -1;

// 每次复制的开始,必须把源文件的指针和目标文件的指针从上次断开的位置去读

while ((len = rafSrc.read(buffer)) != -1) {

rafDes.write(buffer, 0, len);

// 在配置文件写的时候,每次使文件指针移动到最初的位置 — 这样永远对只会存储前8个字节

rafConfig.seek(0);

// 每复制一次之和,赶紧记录下文件指针的位置,以备断点续传使用。

rafConfig.writeLong(rafSrc.getFilePointer());

}

} catch (IOException e) {

System.out.println(e);

} finally {

try {

rafSrc.close();

rafDes.close();

rafConfig.close();

} catch (IOException e) {

System.out.println(e);

}

// 在流关闭之后删除配置文件

System.out.println(“下载成功!”);

configFile.delete();

}

}

}

java实现文件的断点续传和断点下载,有知道的交流下。

/** 

     * 下载服务器已存在的文件 

     *  

     * @param request 

     * @param response 

     * @param proposeFile 

     * @throws IOException 

     * @throws FileNotFoundException 

     */  

    private void downloadExistsFile(HttpServletRequest request,  

            HttpServletResponse response, File proposeFile) throws IOException,  

            FileNotFoundException {  

        log.debug(“下载文件路径:” + proposeFile.getPath());  

        long fSize = proposeFile.length();  

        // 下载  

        response.setContentType(“application/x-download”);  

        String isoFileName = this  

                .encodeFilename(proposeFile.getName(), request);  

        response.setHeader(“Accept-Ranges”, “bytes”);  

        response.setHeader(“Content-Length”, String.valueOf(fSize));  

        response.setHeader(“Content-Disposition”, “attachment; filename=”  

                + isoFileName);  

        long pos = 0;  

        if (null != request.getHeader(“Range”)) {  

            // 断点续传  

            response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);  

            try {  

                pos = Long.parseLong(request.getHeader(“Range”).replaceAll(  

                        “bytes=”, “”).replaceAll(“-“, “”));  

            } catch (NumberFormatException e) {  

                log.error(request.getHeader(“Range”) + ” is not Number!”);  

                pos = 0;  

            }  

        }  

        ServletOutputStream out = response.getOutputStream();  

        BufferedOutputStream bufferOut = new BufferedOutputStream(out);  

        InputStream inputStream = new FileInputStream(proposeFile);  

        String contentRange = new StringBuffer(“bytes “).append(  

                new Long(pos).toString()).append(“-“).append(  

                new Long(fSize – 1).toString()).append(“/”).append(  

                new Long(fSize).toString()).toString();  

        response.setHeader(“Content-Range”, contentRange);  

        log.debug(“Content-Range”, contentRange);  

        inputStream.skip(pos);  

        byte[] buffer = new byte[5 * 1024];  

        int length = 0;  

        while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) {  

            bufferOut.write(buffer, 0, length);  

        }  

        bufferOut.flush();  

        bufferOut.close();  

        out.close();  

        inputStream.close();  

    }  

如何用Java实现HTTP断点续传功能

断点设置方法,当有临时文件时,直接在临时文件中读取上次下载中断时的断点位置。没有临时文件,即第一次下载时,重新设置断点。 rantmpfile.seek()跳转到一个位置的目的是为了让各个断点存储的位置尽量分开。

通过java实现文件下载

在jsp/servlet中断点/多线程下载文件

%@ page import=”java.io.File” %%@ page import=”java.io.IOException” %%@ page import=”java.io.OutputStream” %%@ page import=”java.io.RandomAccessFile” %%! public void downloadFile(HttpServletRequest request, HttpServletResponse response, File file) throws IOException { RandomAccessFile raf = new RandomAccessFile(file, “r”); java.io.FileInputStream fis = new java.io.FileInputStream(raf.getFD()); response.setHeader(“Server”, “”); response.setHeader(“Accept-Ranges”, “bytes”); long pos = 0; long len; len = raf.length(); if (request.getHeader(“Range”) != null) { response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); pos = Long.parseLong(request.getHeader(“Range”) .replaceAll(“bytes=”, “”) .replaceAll(“-“, “”) ); } response.setHeader(“Content-Length”, Long.toString(len – pos)); if (pos != 0) { response.setHeader(“Content-Range”, new StringBuffer() .append(“bytes “) .append(pos) .append(“-“) .append(Long.toString(len – 1)) .append(“/”) .append(len) .toString() ); } response.setContentType(“application/octet-stream”); response.setHeader(“Content-Disposition”, new StringBuffer() .append(“attachment;filename=\””) .append(file.getName()) .append(“\””).toString()); raf.seek(pos); byte[] b = new byte[2048]; int i; OutputStream outs = response.getOutputStream(); while ((i = raf.read(b)) != -1) { outs.write(b, 0, i); } raf.close(); fis.close(); }%% String filePath = request.getParameter(“file”); filePath = application.getRealPath(filePath); File file = new File(filePath); downloadFile(request, response, file);%

是否可以解决您的问题?

java Ftp上传下载断点续传怎样实现?

最关键的一点是设置Http请求头,注意后面有一个“-”,不要落下。

httpget.addHeader(“RANGE”, “bytes=” + offset + “-“);

原创文章,作者:DOWF,如若转载,请注明出处:https://www.506064.com/n/142392.html

(0)
DOWFDOWF
上一篇 2024-10-11
下一篇 2024-10-11

相关推荐

  • javamysqldesc的简单介绍

    本文目录一览: 1、java中能否将升降序(asc,desc)作为一个String类型的参数传到mysql中 2、java习题:使用mysql数据库创建学生信息表 3、java m…

  • python实现rip的简单介绍

    本文目录一览: 1、rip采用何种算法 2、Python 函数的调用方式 3、Python3 & TCP协议和UDP协议的特点和区别 4、eNSP模拟实验-动态路由RIP配…

    编程 2024-10-03
  • Java类继承完整解析

    Java类的继承是面向对象编程中最重要和最基本的概念之一。继承的概念是指一个类从另外一个类获取属性和方法,而被获取的类称为父类或超类,使用该属性和方法的类称为子类或派生类。在本篇文…

    编程 2024-10-04
  • python读取json文件部分数据的简单介绍

    1、Python如何从.json文件中获取数据? 2、py 如何读取json的部分数据? 3、如何用python读取json文件里指定的数据 json是一个文本数据,读取进Pyth…

    编程 2024-10-03
  • cad命令窗口不见了怎么显示出来,cad上面的窗口不见了

    本文目录一览: 1、CAD命令栏不见了怎么调出来 2、cad命令输入框没了 3、cad的命令栏怎么显示出来 4、CAD命令行不见了,怎么打开 5、cad命令栏窗口不见了,如何调出来…

    编程 2024-10-03
  • 从多个方面详解base64转文件流

    一、Base64编码的特点与应用 Base64编码是一种基于64个可印字符来表示二进制数据的方法。这种编码通常用于传输、存储一些二进制数据,例如图片、音频、视频等等,因为文本协议(…

    编程 2024-10-08
  • python取嵌套json的键和值,python解析嵌套json

    本文目录一览: 1、python 多层嵌套的json内容 怎么获取 2、如何用python读取json里面的值啊 3、如何用Python解析多层嵌套的JSON? python 多层…

    编程 2024-10-03
  • 学习Python网络爬虫技术

    介绍 海量数据是当今互联网时代的核心之一,而获取这些数据的一个重要方式就是使用网络爬虫技术。Python作为一种快速、易读易写的高级编程语言,成为网络爬虫的首选语言。本文将介绍使用…

    编程 2024-10-04
  • 基于python的dea绘图(dea模型python)

    1、python的作图包有哪些 2、Python如何运用matplotlib库绘制3D图形 3、Python作图程序 4、Python气象数据处理与绘图(18):泰勒图 5、如何使…

    编程 2024-10-03
  • PHP函数一览表

    PHP是一种常用于Web开发的服务器端脚本语言。它广泛应用于开发动态网页、Web应用和Web服务。PHP函数是一种能够执行某个任务并返回结果的代码。对于PHP函数,我们可以按照不同…

    编程 2024-10-04

发表回复

登录后才能评论