- 浏览: 405926 次
- 性别:
- 来自: 福州
最新评论
-
野牛精:
感谢楼主分享,帮大忙了。
android ftp 客户端编写(ftp4j) -
happytianqiu:
你好,我最近也在搞这个,能发个demo吗,邮箱是:624951 ...
开发android机顶盒应用 事件,焦点处理 -
zhunanfengfeimeng:
http://www.iteye.comhttp://www. ...
android ftp 客户端编写(ftp4j) -
icyttea:
好棒!感谢楼主分享
vlc for android录制视频与截图 -
clwwlc:
有demo吗
开发android机顶盒应用 事件,焦点处理
java中的ftp4j是个不错的框架,可以用于java实现ftp的一些操作。
这个框架已经实现了ftp的功能,如果需要移植到android,就需要一些界面元素与后台进程。
android这样直接利用现在的java框架完成一些事情是比较容易的。
ftp4j的文档还是蛮全的,而且容易读懂。
apache也有ftp客户端,该客户端已经有些时日,由于平常没有用到ftp,所以不维护了.
如果工具不会用,可以参考 jetbrains.com的视频(idea以前是收费的,文档,示例都相当完善),或者使用eclipse,
关于工程的错误,不解释,本人所有工程只是idea工程,如果是eclipse,请自行处理.
这个框架已经实现了ftp的功能,如果需要移植到android,就需要一些界面元素与后台进程。
android这样直接利用现在的java框架完成一些事情是比较容易的。
ftp4j的文档还是蛮全的,而且容易读懂。
使用方法: FTPClient client = new FTPClient(); client.connect("ftp.host.com", 8021); client.login("carlo", "mypassword"); 没有异常表示连接成功,否则会垫子抛出FTPException异常。 当然还有一些重载方法,如果端口为21就可以用client.connect(host); 为了处理匿名的登录,可以client.login("anonymous", "ftp4j");,用户名是anonymous,密码随意。 登录之后需要对服务器进行操作,如目录显示,进入等; String dir = client.currentDirectory(); 显示当前目录 修改进入的目录 client.changeDirectory(newPath); 可以使用相对路径,也可以使用绝对路径,下面两种都可以。 client.changeDirectory("/an/absolute/one"); client.changeDirectory("relative"); 如果只想进入上一层:client.changeDirectoryUp(); ftp4j中有两个特别目录“.","..",分别表示根目录与上一层目录。 重命名:client.rename("oldname", "newname"); 或移动文件:client.rename("myfile.txt", "myfolder/myfile.txt"); 删除文件:client.deleteFile(relativeOrAbsolutePath);可以使用相对或绝对路径。 创建目录:client.createDirectory("newfolder"); 删除目录:client.deleteDirectory(absoluteOrRelativePath); 显示文件,目录,链接 由于服务器的不同,所以返回的文件列表格式也不同,可能是UNIX,也可能是WIN的。ftp4j目录支持: UNIX style and variants (i.e. MAC style) DOS style NetWare styles EPLF MLSD .显示当前的目录文件:FTPFile[] list = client.list(); FTPFile包含了所需要的信息,从type可以知道是目录还是文件,或链接。 除此外还可以过滤: FTPFile[] list = client.list("*.jpg");过滤了,只显示图片 如果想知道修改上期,需要单独获取,不能从上面的list()方法得到: java.util.Date md = client.modifiedDate("filename.ext"); 接下来就是上传与下载了: client.download("remoteFile.ext", new java.io.File("localFile.ext")); client.upload(new java.io.File("localFile.ext")); 追加内容的上传 client.append(new java.io.File("localFile.ext")); 这些是阻塞方法,只有在完成后才返回,所以一个FTPClient只能在同时进行一个传输。如果你想多个文件同时传输,可以使用多个FTPClient,FTPClient单独连接服务器。 当今的软件不能只是功能上实现了,还需要注意用户体验,所以上传下下载需要知道进度,ftp4j都通过FTPDataTransferListener这个接口来实现的,如果有一个方法: public void transferred(int length) { // Yet other length bytes has been transferred since the last time this 这个方法是说在距上一次传输到这一次传输的内容多少, 如果要有一个进度条,需要知道总量,然后当前传输的量,所以需要进行一些处理,如在开始上传时,获取本地文件上传大小,然后从这个接口中得到已经传输的文件叠加起来得到已经传输文件总量的大小,再计算得到进度。 从FTPClient中可以知道:在上传时:listener.transferred(l);l表示这次传输的量,但这似乎不是我们想要的, 修改为:listener.transferred(done);这个done表示的是上传的总量,是已经存在的,直接使用就好了。 } 然后就可以通过重载方法加入这个监听器client.download("remoteFile.ext", new java.io.File("localFile.ext"), new MyTransferListener());,其它略了。 对同一个FTPClient,多个线程间的操作是有影响的,如可以在其它线程中调用abortCurrentDataTransfer()来结当前的传输行为。 这个方法传入 false表示突然停止,传入true表示发送ABOR命令,是个合法的结束。然后会有FTPAbortedException异常。 ftp4j还支持断点: client.download("remoteFile.ext", new java.io.File("localFile.ext"), 1056);表示从1057开始,前面的不需要再传输了。 上传也类似 。 主动与被动的传输: 主动的传输行为: 客户端发送ip地址与端口号到服务器 客户端请求服务器传输数据,开始监听端口 服务器连接地址与端口 数据传输由一个新的通道开始传输。 主动的需要客户端支持接收信息如果客户端有防火墙,代理等,会有些问题, 被动的传输行为: 客户端请求服务器准备被动的数据传输。 服务器回复并带有ip与端口。 客户端请求传输也连接。 数据传输由一个新的通道开始传输。 通过以下方式改变: client.setPassive(false); // Active mode client.setPassive(true); // Passive mode 默认是被动的。 这些属性可以通过系统属性来设置 : 如ftp4j.activeDataTransfer.acceptTimeout设置超时时间: java -Dftp4j.activeDataTransfer.hostAddress=178.12.34.167 -Dftp4j.activeDataTransfer.portRange=6000-7000 -Dftp4j.activeDataTransfer.acceptTimeout=5000 MyClass Set property values directly in the code. I.e.: System.setProperty("ftp4j.activeDataTransfer.hostAddress", "178.12.34.167"); System.setProperty("ftp4j.activeDataTransfer.portRange", "6000-7000"); System.setProperty("ftp4j.activeDataTransfer.acceptTimeout", "5000"); 二进制与文本传输类型: 从源码可以看出是以后缀名来判断文件的类型,所以个人认为,上传的文件需要自己知道什么类型的,不小心将二进制文件改为txt后缀,可能会有些问题。 client.setType(FTPClient.TYPE_TEXTUAL); client.setType(FTPClient.TYPE_BINARY); client.setType(FTPClient.TYPE_AUTO); 当然它提供了一些自定义的类型client.setTextualExtensionRecognizer(myRecognizer); 一些服务器支持数据压缩传输,叫MODE Z。可以通过client.setCompressionEnabled(true);打开,在这之前可以确认:boolean compressionEnabled = client.isCompressionEnabled(); 站点规范与命令: FTPReply reply = client.sendSiteCommand("YOUR COMMAND"); 也可以自定义命令 FTPReply reply = client.sendCustomCommand("YOUR COMMAND"); 都返回一个FTPReply对象。可以从这个对象得到一些返回代码,信息等内容。 ----------------------------------------------- 上面是ftp4j的文档的一些知识。有了以上知识,开发一个android客户端就相对容易多了。 如我想得到服务器的文件目录操作(选择文件,选择目录,进入目录) 就可以使用ListView+ListAdapter显示目录与文件,然后由于 android的操作可以使用OnItemLongClickListener长按与短按OnItemClickListener分别指定一些操作,如短按可以选择为进入目录: public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { FTPFile ftpFile=mFileList.get(i); String filename=ftpFile.getName(); if ("..".equals(filename)) { Log.d(TAG, "change directory up."); changeDirectoryUp(); } else if (".".equals(filename)) { Log.d(TAG, "change directory root"); changeDirectory("/"); } else { if (ftpFile.getType()==FTPFile.TYPE_DIRECTORY) { Log.d(TAG, "change directory:"+filename); changeDirectory(filename); } } } mFtpClient.changeDirectory(path); mFtpClient.changeDirectoryUp();就是上面最终调用的方法。 然后在长按中: FTPFile ftpFile=mFileList.get(i); String filename=ftpFile.getName(); if ("..".equals(filename)||".".equals(filename)) { Log.d(TAG, "在这里没有处理"); } else { if (ftpFile.getType()==FTPFile.TYPE_DIRECTORY) { Log.d(TAG, "change directory:"+filename); selectDirectory(filename); } } selectDirectory()方法就是作为选中目录上传目的地。然后可以将本地文件传入这个目录。 在改变目录后调用: private void refreshFiles(FTPClient mFtpClient) throws IOException, FTPIllegalReplyException, FTPException { FTPFile[] files=new FTPFile[0]; try { files=mFtpClient.list(); List<FTPFile> ftpFiles=(List<FTPFile>) Arrays.asList(files); mFileList.clear(); mFileList.addAll(ftpFiles); Message message=Message.obtain(mHandler, REFRESH_FILE); message.obj=mFtpClient.currentDirectory(); mHandler.sendMessage(message); //这里就是刷新ListView。 } catch (FTPDataTransferException e) { e.printStackTrace(); } catch (FTPAbortedException e) { e.printStackTrace(); } catch (FTPListParseException e) { e.printStackTrace(); } } 提供了上传下载的功能后,就可以使用它了,建立一个简单的ftp服务器,HOMEftpserver就是个不错的东西,然后拍照或录像再上传。其它就不说了,直接传代码上来。完成的程序可以使用,只是有些简陋,仅供参考。目前的需求就是拍照来录像后上传到ftp。
- FtpDemo.zip (235.4 KB)
- 下载次数: 1377
评论
10 楼
野牛精
2015-09-17
感谢楼主分享,帮大忙了。
9 楼
zhunanfengfeimeng
2015-07-22
http://www.iteye.comhttp://www.iteye.com/images/smiles/icon_wink.gif /images/smiles/icon_wink.gif
8 楼
phenom
2014-08-11
zmttpassion 写道
无比郁闷!不会用这个开发工具
apache也有ftp客户端,该客户端已经有些时日,由于平常没有用到ftp,所以不维护了.
如果工具不会用,可以参考 jetbrains.com的视频(idea以前是收费的,文档,示例都相当完善),或者使用eclipse,
7 楼
zmttpassion
2014-08-11
无比郁闷!不会用这个开发工具
6 楼
xzongyuan
2013-03-21
代码有参考价值
5 楼
xzongyuan
2013-03-21
学到很多,谢谢
4 楼
phenom
2013-03-11
engineer_hu 写道
下载下来以后,放在android开发环境中,还没有运行,报一堆错误。
关于工程的错误,不解释,本人所有工程只是idea工程,如果是eclipse,请自行处理.
3 楼
engineer_hu
2013-03-11
下载下来以后,放在android开发环境中,还没有运行,报一堆错误。
2 楼
WindProtect
2013-01-17
谢谢博主~很详细的说!
1 楼
Rockey723
2012-09-11
相当详细啊,顶,对我这新菜很有用。还请楼主多照应、、、
发表评论
-
android 批量打渠道包
2014-09-16 17:27 5813打包,是一个经常会遇到的问题,写个脚本就可以解决了.不同的脚本 ... -
vlc for android录制视频与截图
2014-09-08 18:31 7972首先说明,这不算原 ... -
android百度地图转为高德地图
2014-08-11 11:09 2905使用百度地图也不少时间了,但是一直出现无法解决的问题,在官 ... -
编译 i9000的cm系统
2014-08-04 13:10 1534[color=red][b]此文 并不 ... -
mp4v2 保存h264流
2014-05-01 21:15 11760大侠已经完成了很多操作了,唯一不足的是,工程完整性差一些,而且 ... -
baidumap的缩放到看到所有点
2014-04-09 21:03 1393之前使用1.3.5版本的sdk,通过调用mapviewcont ... -
ViewPager 查看图片
2014-02-13 12:59 4469一个图片查看器 , app到处都是 , 但那是别人的. 现在的 ... -
机顶盒 页面 选中后的 动画
2013-12-05 09:39 2128前面已经说过了,对于机顶盒的焦点的处理. 相信有不少人看 ... -
引爆你的图片浏览, ListView 大图片
2013-11-05 07:58 1260之前发现,ListView里面的图片资源越占越大,特别是当 ... -
微博开放源码
2013-10-23 12:09 983微博程序已经发布不少时间了,但一直也没有很多用户使用,主要在用 ... -
Mupdf 缩小apk包,减少字体
2013-10-20 15:53 3662在以前的apv中,字体占了很大的一部分,如果去除cjk字体 ... -
ActionBar appcompat 解决碎片化问题
2013-09-15 16:58 2117actionbarsherlock 这个在api11以下的系统 ... -
android机顶盒获取有线mac
2013-09-02 16:09 5429直接上代码: public static String ... -
android竖着的seekbar
2013-08-22 20:33 5428以前网上有位虾士发过一篇文章是关于竖着的seekbar,但是也 ... -
新浪微博oauth2.0 自动认证
2013-08-13 09:01 0oauth2.0作者认为它不先进,都放弃了.但是oauth2. ... -
android 颜表情.
2013-07-20 21:16 1772在使用TagsViewGroup 流布局后,我替换了原来的Gr ... -
flow 流布局.
2013-07-13 20:06 1257在git上看到一个FlowingViewGroup,代码有点旧 ... -
开发android机顶盒应用 事件,焦点处理
2013-07-13 19:58 19748机顶盒应用不同于手机 ... -
android 磁盘缓存.
2013-07-13 19:30 5231开发一个app,特别是图片的app,免不了要存储图片,内存缓存 ... -
TextView 文字淡入效果
2013-04-15 13:34 3449一个文本渐渐地从左到右的显示。 几步就可以了实现了。利用的是V ...
相关推荐
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
它支持多种操作系统,包括但不限于Windows、macOS、Linux、Android和iOS。通过Qt,开发者可以使用同一套源代码,在不同平台上编译并生成原生外观与体验的应用程序,极大地提高了开发效率和产品一致性。 图形用户...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
编写的前端应用程序和 Android 服务,以及为上述架构交叉编译的 aria2 二进制文件。 有关 Android 应用程序如何启动这些二进制文件的详细信息,请参阅手册(不需要 root 访问权限)。 等等,什么? 是一个强大的 ...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...
它支持多种操作系统,包括但不限于Windows、macOS、Linux、Android和iOS。通过Qt,开发者可以使用同一套源代码,在不同平台上编译并生成原生外观与体验的应用程序,极大地提高了开发效率和产品一致性。 图形用户...