我使用的是ftp4j的SDK,非常轻巧易用,可以轻松的实现类似文件管理器的功能,但我的项目需求只要求下载,所以就只实现了下载功能。

官方地址:http://www.sauronsoftware.it/projects/ftp4j/manual.php

文档非常简明易懂:

直接贴上我的代码:

public class FTPUtils {public interface Callback {void onSuccess(String filePath);void onFail();}/*** 下载FTP服务器上面的文件* @param url       ftp服务器地址* @param userName  登录账号* @param password  密码* @param callback 下载结果回调*/@SuppressLint("CheckResult")public static void download(final String url,final String userName,final String password,final Callback callback) {Observable.create(new ObservableOnSubscribe<String>() {@Overridepublic void subscribe(ObservableEmitter<String> subscriber) {String downloadLocalPath = "";try {String net = url.replace("ftp://", "");String hostAndPort = net.substring(0, net.indexOf("/"));String[] hps = hostAndPort.split(":");FTPClient client = new FTPClient();client.connect(hps[0], Integer.parseInt(hps[1]));client.login(userName, password);String path = net.substring(net.indexOf("/"), net.lastIndexOf("/"));String[] strings = path.split("/");StringBuilder sb = new StringBuilder();for (String directory : strings) {if (TextUtils.isEmpty(directory)) continue;sb.append(directory).append(File.separator);}String directory = sb.toString();//跳转到指定路径client.changeDirectory(directory);String dir = client.currentDirectory();FTPFile[] list = client.list();boolean fileExist = false;String fileName = net.substring(net.lastIndexOf("/") + 1);for (FTPFile file : list) {if (file.getName().equals(fileName)) {fileExist = true;break;}}//找到文件就下载if (fileExist) {downloadLocalPath = FilePathUtils.getIntance(MyApp.getContext()).getDownFilePath() + File.separator + fileName;client.download(fileName, new java.io.File(downloadLocalPath));}} catch (Exception e) {e.printStackTrace();}subscriber.onNext(downloadLocalPath);}}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) {if (TextUtils.isEmpty(s)) {callback.onFail();} else {callback.onSuccess(s);}}});}
}

看,非常简单,有3点需要注意:

1、client.connect传入的host,不能带ftp://这样的开头,必须直接用172.2.3.9这种格式

2、FTPClient.list()的时候一直报错FTPListParseException,原因跟DOSListParser类的日期格式有关,参考:https://www.cnblogs.com/yhzh/p/5110293.html

解决办法就是不要用jar包,直接修改源代码:

3、调用changeDirectory方法的时候也报错,记住,不要用"/file/file1/file2"这种路径格式,因为dos系统包括windows只能识别'\'这样的文件夹符号,所以需要用File.separator()

android端集成FTP文件下载功能相关推荐

  1. Android端集成支付宝支付

    Android端集成支付宝支付 1.申请账号及配置变量 支付宝快速接入链接点击打开链接 支付宝扫码或者账号密码登录 下面是支付宝给出的接入介绍 第一步:创建应用并获取APPID 要在您的应用中接入支付 ...

  2. Android 端“被挤下线”功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jianshu.com/p/

    Android 端"被挤下线"功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jiansh ...

  3. 友盟统计封装android,react native 友盟统计 Android 端集成

    ios 端 可参考:https://www.jianshu.com/p/879d28ee74e6 趁热打铁吧,把刚才已经完成的友盟统计集成记录下 Android端集成: 分下面几部: 步骤 sdk的集 ...

  4. Android端集成大疆SDK(MSDK)

    Android端集成大疆MSDK 大疆无人机SDK集成项目 1. 无人机接入准备 2. 编译环境准备 3. 关键代码 4. 项目地址 大疆无人机SDK集成项目 本项目主要是集成大疆SDK,并通过大疆A ...

  5. php curl ftp下载文件,php使用curl实现ftp文件下载功能的方法

    这篇文章主要为大家详细介绍了php使用curl实现ftp文件下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 具体内容如下 不知道为什么用正常的ftp_get函数下载文件速度特别慢,但是用f ...

  6. java后台与android端集成信鸽推送和华为推送通道

    时间比较紧,并未调试. 需求:后端可以针对指定账号或者列表进行通知栏信息推送,优先使用华为通道.点击通知栏消息打开指定activity 后端版本V3,android sdk 3.2.7 一.后端部分代 ...

  7. android 分享到微博客户端,Android APP集成新浪微博分享功能

    本文为大家分享了新浪微博分享功能集成,供大家参考,具体内容如下 直接导入weibosdkcore.jar:适用于只需要授权.分享.网络请求框架功能的项目. 无论使用哪一种方式,都需要先将demo中li ...

  8. 踩坑!android端集成QQ第三方登录

    有时候在想,自己怎么能这么懒,几篇早就想写的博客,一直拖到一两个月后才着手开始写,说实话都有点忘记了,但还是记录一下吧,兴许以后用的到呢~ 回归正题,这次来记录一下我集成QQ三方登录的过程吧(Ps:a ...

  9. bugly android 错误不上报,Flutter Android 端集成 Bugly 的异常上报和升级功能

    前提 Flutter 版本:1.17.0地址,别用最新版本或者比较老的版本.我之前使用1.13.0版本也会出现问题. Dart版本:2.8.1使用Flutter中提供的版本 ok ,在大版本相同的情况 ...

最新文章

  1. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?
  2. Git使用教程:超详细、超傻瓜、超浅显、真正手把手教!
  3. 如何一次关闭所有打开的标签?
  4. java 反射获取泛型,用反射获取Java中的泛型参数的类型
  5. WinCE驱动编写小结(转载)
  6. Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览
  7. Spring Boot 2.0.0.M7 生产环境部署
  8. pmp知识点详解-项目大牛整理_PMP项目管理第六章:项目进度管理(5)核心知识点...
  9. win10系统更新补丁时进度条一直卡在0%不动的解决方案
  10. HCIE Secuirty 防火墙IPS功能和NIP 备考笔记(幕布)
  11. 微型计算机系统的几个指标课件,[计算机基础课件67.ppt
  12. CSS现状和如何学习
  13. python版本AES CBC 模式ECA加密逻辑
  14. 关于RHCE考证的那些事
  15. qlikview中日期问题的两个小结
  16. 诱人却非万能,理性看待Serverless的落地
  17. android充电指示灯颜色修改
  18. 看了他家的红木装修,彻底被圈粉了,庄重典雅又复古舒适
  19. 第一个单片机程序(C语言编写)
  20. javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher su 解决办法

热门文章

  1. 苏嵌//张朋//2018.07.23
  2. matlab如何多幅图统一一个颜色栏,每个图使用多个颜色图【含Matlab源码】
  3. 前端鼠标点击出现动画大全
  4. 【AAD Connect】01:AAD Connect把本地AD账户同步到Office365(AD域账户迁移)
  5. 深圳企业选择深圳SEO外包的理由
  6. 彻底解决Android系统A-GPS搜不到卫星的问题!亲测!
  7. 电脑连不上ishanghai_i-Shanghai免费上网将不限时 详解如何上网不掉线
  8. vnc却显示 failed to connect:操作成功完成。(0)
  9. 一个完整的项目管理流程
  10. 全排列(从大到小排列)