FTP断点续传案例以及多线程下载的Demo

该博客分享了FTP断点续传的Java实现案例,包括多线程下载的Demo。作者提供了一个包含多种文件传输方式的源码下载,如网络、本地、FTP传输,以及多线程下载和断点续传功能。源码中包含了具体的实现细节,适合需要进行FTP功能开发的开发者参考。
摘要由CSDN通过智能技术生成

FTP断点续传案例以及多线程下载的Demo

在使用FTP的过程中,很多时候需要系统支持断点续传以及多线程下载,前段时间为了做这个功能,各种搜索,综合了一下,写了一个demo,给正在写FTP的童鞋一点启发。源码下载地址会附在文章末尾,源码中包含文件传输的多种方式,网络文件传输,本地文件传输,FTP文件传输,以及多线程下载和断点续传,多线程断点续传,每个包对应一种方式,需要的自行查看哪个包是哪种类型

上代码:
文件上传下载的类:

package com.shallowdream.threaddemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
 * 支持断点续传的FTP实用类
 * @author BenZhou
 * @version 0.1 实现基本断点上传下载
 * @version 0.2 实现上传下载进度汇报
 * @version 0.3 实现中文目录创建及中文文件创建,添加对于中文的支持
 */
public class ContinueFtp {
   
    public FTPClient ftpClient = new FTPClient();

    public ContinueFtp(){
   
        //设置将过程中使用到的命令输出到控制台
        this.ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
    }
    /**
     * 连接到FTP服务器
     * @param hostname 主机名
     * @param port 端口
     * @param username 用户名
     * @param password 密码
     * @return 是否连接成功
     * @throws IOException
     */
    public boolean connect(String hostname,int port,String username,String password) throws IOException{
   
        ftpClient.connect(hostname, port);
        ftpClient.setControlEncoding("GBK");
        if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
   
            if(ftpClient.login(username, password)){
   
                return true;
            }
        }
        disconnect();
        return false;
    }

    /**
     * 从FTP服务器上下载文件,支持断点续传,上传百分比汇报
     * @param remote 远程文件路径
     * @param local 本地文件路径
     * @return 上传的状态
     * @throws IOException
     */
    public DownloadStatus download(String remote,String local) throws IOException{
   
        //设置被动模式
        ftpClient.enterLocalPassiveMode();
        //设置以二进制方式传输
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        DownloadStatus result;

        //检查远程文件是否存在
        FTPFile[] files = ftpClient.listFiles(new String(remote.getBytes("GBK"),"iso-8859-1"));
        if(files.length != 1){
   
            System.out.println("远程文件不存在");
            return DownloadStatus.Remote_File_Noexist;
        }

        long lRemoteSize = files[0].getSize();
        File f = new File(local);
        //本地存在文件,进行断点下载
        if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值