FTP客户端实则是相对于远程文件的一个文件管理器,主要的功能有登录,下载,上传,剪切,粘贴,新建文件夹,重命名,删除文件,查看文件属性,同步等等。其实同步也就是上传,只是把上传功能修饰了一下罢了,应用需要引入一个ftp4j.jar的库。那就先说说整个客户端的代码逻辑吧。

用户进入应用后首先进入的是登录连接服务器,获取一个ftpclient引用,有了它你就能为所欲为了,呵。获取ftpClient之后我们就可以进行文件浏览和操作了,文件操作大都比较简单,就挑几个重点的吧。一个是剪切,剪切的时候只需要将选择的文件的绝对路径存储到SharedPreferences,等到调用粘贴的时候再调用剪切ftpClient.reName(oldName,newName)方法便可实现剪切功能。另一个就是同步,同步功能是将从服务端下载过而在本地又修改过的资源进行上传进而覆盖掉服务端的资源,达到更新的目的。笔者实现同步功能的做法是首先在下载的时候将下载的文件对应于服务端的绝对路径、下载时间、下载到本地的路径存储于数据库,每次用户进入应用的时候对数据库进行更新,将存在有记录而没有对应文件的记录删除。然后当用户点击同步的时候就逐一进行最后修改时间对比,找到有修改过的文件便对其进行上传到ftp的相应目录进行覆盖,再对数据库进行更新。

ftp基本操作代码

/*** 删除服务器上指定文件* * @throws FTPException* @throws FTPIllegalReplyException* @throws IOException* @throws IllegalStateException* */public static void removeFTPFile(FTPClient ftpClient,String removeFilePath, boolean isDirectory)throws IllegalStateException, IOException,FTPIllegalReplyException, FTPException {if (isDirectory) {ftpClient.deleteDirectory(removeFilePath);return;}ftpClient.deleteFile(removeFilePath);}/*** 给服务器上的文件进行重命名* */public static void renameFTPFile(Context context,final FTPClient ftpClient, final FTPFile file) {Builder builder = new AlertDialog.Builder(context);// 设置对话框的标题builder.setTitle("重命名");final EditText edit = new EditText(context);edit.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));edit.setHint(file.getName());builder.setView(edit);builder.setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {if (edit.getText() != null && !"".equals(edit.getText())) {try {ftpClient.rename(file.getName(), edit.getText().toString());} catch (Exception e) {e.printStackTrace();}}}});builder.setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}/*** 剪切* */public static void cutFTPFile(SavePreferencesData savePreData,String cutFTPFileAbsolutePath) {savePreData.putStringData("cut", cutFTPFileAbsolutePath);}/*** 粘贴* * @throws FTPException* @throws FTPIllegalReplyException* @throws IOException* @throws IllegalStateException* */public static void pasteFTPFile(SavePreferencesData savePreData,FTPClient ftpClient, String newPath) throws IllegalStateException,IOException, FTPIllegalReplyException, FTPException {String cutPath = savePreData.getStringData("cut");if (!"".equals(cutPath)) {ftpClient.rename(cutPath,newPath+ "/"+ cutPath.substring(cutPath.lastIndexOf("/") + 1,cutPath.length()));savePreData.clear();}}/*** 显示文件属性* */public static void showFTPFileProperty(Context context, FTPFile file) {Builder builder = new AlertDialog.Builder(context);// 设置对话框的标题builder.setTitle("属性");String type = file.getType() == FTPFile.TYPE_DIRECTORY ? "文件夹" : "文件";builder.setMessage("文件名: " + file.getName() + " \n 文件类型: " + type+ "\n 文件大小: " + file.getSize() + " 字节 \n 上次修改时间: "+ file.getModifiedDate());builder.create().show();}/*** 下载指定文件* */public static void downloadFTPFile(FTPUtil util, Map<String, String> item) {util.setFile(item);util.preTransFile();}/*** 新建文件夹* */public static void newFTPFileDirectory(Context context,final FTPClient ftpClient) throws IllegalStateException,IOException, FTPIllegalReplyException, FTPException {Builder builder = new AlertDialog.Builder(context);// 设置对话框的标题builder.setTitle("新建文件夹");final EditText edit = new EditText(context);edit.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));builder.setView(edit);builder.setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {if (edit.getText() != null && !"".equals(edit.getText())) {try {ftpClient.createDirectory(edit.getText().toString());} catch (Exception e) {e.printStackTrace();}}}});builder.setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}

ftp上传下载功能实现

/*** 传输文件* * @throws FTPAbortedException* @throws FTPDataTransferException* @throws FTPException* @throws FTPIllegalReplyException* @throws IOException* @throws FileNotFoundException* @throws IllegalStateException*/private void transFile() throws IllegalStateException,FileNotFoundException, IOException, FTPIllegalReplyException,FTPException, FTPDataTransferException, FTPAbortedException {operateType = (String) mQueue.get(0).keySet().toArray()[0];filePath = mQueue.get(0).get(operateType);if (operateType.equals(Constants.TYPE_DOWNLOAD)) {File file = new File(Constants.workSpace+ filePath.substring(filePath.lastIndexOf("/") + 1,filePath.length()));mFtpClient.download(filePath, file, new MyFTPDataTransferListener());} else if (operateType.equals(Constants.TYPE_UPLOAD)) {File file = new File(filePath);if (file.exists()) {System.out.println("upload path ----> " + uploadPathQueue.get(0));mFtpClient.changeDirectory(uploadPathQueue.get(0));mFtpClient.upload(file, new MyFTPDataTransferListener());}}}

ftp登录和注销功能

/*** 这里在外面有非ui线程来处理* * @param host*            ftp主机* @param port*            端口* @param username*            用户名* @param password*            密码*/public FTPClient login(String host, int port, String username,String password) {if (null != mFtpClient)return mFtpClient;try {mFtpClient = new FTPClient();mFtpClient.connect(host, port);mFtpClient.login(username, password, null);return mFtpClient;} catch (Exception e) {e.printStackTrace();Toast.makeText(context, "连接服务器失败", Toast.LENGTH_LONG).show();}return null;}/*** 注销*/public void logout() {if (null != mFtpClient) {try {mFtpClient.logout();mFtpClient.disconnect(true);} catch (IOException e) {e.printStackTrace();} catch (FTPIllegalReplyException e) {e.printStackTrace();} catch (FTPException e) {e.printStackTrace();}}}

最后提供一下源码下载吧; 点击打开链接

android ftp客户端开发相关推荐

  1. Android:Socket客户端开发,Android 的Socket客户端优化,Android非UI线程修改控件程序崩溃的问题

    一.Android:Socket客户端开发 创建一个工程 我们要做的是按下按键之后,去往服务器 (服务器) 或者我们自己写的服务器 ,给他发送一些预定好的东西 然后打开操作界面 然后修改一下 你要发送 ...

  2. android telnet服务器端,Android FTP客户端实现、Telnet客户端

    Android FTP客户端实现 android中使用第三方库来操作FTP,这里使用Apache的包,下载地址为:http://commons.apache.org/proper/commons-ne ...

  3. 浅谈android手机客户端开发

    广州手机app客户端开发公司[启汇网络]企业开始注重Android手机客户端开发,源于android手机市场的庞大. 从android手机数量上看,三星无疑是推出 Android 移动设备最多的公司, ...

  4. Android FTP 客户端 上传/下载 带进度条实战源码

    Android FTP 开发,我个人是使用commons-net-3.1.jar,别问我为什么是度娘教我的,附上commons-net-3.1.jar的开源下载地址http://grepcode.co ...

  5. 使用FTP(IOS FTP客户端开发教程)

    本文翻译自新近Wrox出版社出版的,由Peter van de Put所著的<Professional.iOS.Programming>.该书题材比较新颖,结构合理,是一本不错的IOS开发 ...

  6. Android FTP客户端使用,快速上传文件

    1.ftp依赖 看Android版本使用 compile 'commons-net:commons-net:3.5' implementation 'commons-net:commons-net:3 ...

  7. Android网站客户端开发

    注:本文来自友盟-安卓巴士教程大赛第一名获奖作品,作者安卓巴士的ID为liupeinye.推荐给所有刚刚开始接触Android开发的朋友们! 本文面向Android初级开发者,有一定的Java和And ...

  8. Android新闻客户端开发3--显示新闻详细内容UI设计

    基于Android小巫新闻客户端开发---显示新闻详细内容UI设计 2013年2月27日,天气潮湿!!! 距上一次写的主界面业务逻辑实现,已经过来11天,小巫觉得拖得太久了,所以决定尽量把所有的内容介 ...

  9. android 新浪微博客户端开发

    [转载]android开发新浪微博客户端 完整攻略 分类: android 2011-04-23 22:45 3193人阅读 评论(4) 收藏 举报 开始接触学习android已经有3个礼拜了,一直都 ...

最新文章

  1. 【ASP.NET】 【防止连续多次点击提交按钮 导致页面重复提交】
  2. android view 转Bitmap 生成截图
  3. opencv 常见细碎问题解决
  4. Spark SQL 中UDF的讲解
  5. 好大夫王航:长尾开发者应尽快接入百度轻应用
  6. Oozie自带MapReduce示例的运行
  7. CentOS6.5 环境安装配置
  8. hdu 1556 Color the ball (线段树做法)
  9. Silverlight-Cailburn应用框架
  10. nodejs后台系列--第六篇-把nodejs后台部署到云服务器上面
  11. 集成系列:低代码对接泛微e-cology
  12. Comware V7系统设备,密码+秘钥双因子认证方式,登陆设备典型配置案例
  13. swfobject java_[Java教程]swfobject.js视频播放插件
  14. 谷歌:AI系统需要“自我怀疑”能力,方能作出更好的决定!
  15. sql python excel_数据技能篇(EXCEL,SQL,Python)
  16. matlab曲面的最小值,在matlab中计算曲面的曲率
  17. 设定所有版本的谷歌浏览器支持flash
  18. 微信朋友圈广告怎么做?
  19. turtle画图实现阿根廷足球
  20. A component required a bean of type ‘com.lw.mapper.StudentMapper‘ that could not be found.

热门文章

  1. 头条搜索SEO优化规则解析
  2. excel不显示0_Excel表格技巧—用箭头标记Excel表格中数据增减的方法
  3. 免费OA系统使用心得
  4. chemdraw 科学绘图软件
  5. 一、STM32程序下载软件_FlyMCU
  6. Android属性系统分析
  7. netty之心跳机制
  8. 车载激光雷达ISO国际标准预研工作启动 以中国提案为基础完善框架
  9. Impinj阅读器与PC连接
  10. ​什么是晶振?晶振是怎么制成的?晶振的内部结构,晶振的工作应用以及影响晶振频率相关的参数介绍