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

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


关于FTP我们在Android开发的时候先说一下特别需要注意,就当是正餐之前调味吧。

1.FTP是基于TCP/IP协议的常用端口是:21,也就是如果不设置端口实际上就是访问了21端口

2.FTP编程要特别考虑到编码的问题,尤其是要和FTP服务的编码能匹配,实际上一搬都是UTF-8,Android也是UTF-8,所以大部分时候没问题,但是一旦乱码就要想想是不是客户端的编码和服务端编码不匹配了。

3.由于Android上编程要求任何带网若访问的类不能放在主UI的绚烂线程,所以一定要注意另开线程使用这个包里FTP类org.apache.commons.net.ftp.FTPClient。

4.记得 <uses-permission android:name="android.permission.INTERNET" />加在AndroidManifest.xml之后

5.注意FTP服务起如果和客户端长时间没有信息交互可能会自动断开当前连接,所以根据实际情况每隔一段时间调用FTPClient类下的sendNoOp()方法这类似于心跳包。


下面是正餐直接上Demo效果图,有图有真相呵呵,功能一目了然,上传下载都有进度条,贴出源码下载地址,只要1分。


我封装一个工具类UitlsFTP(见源码),来处理FTP的连接,上传/下载,都是带进度的额
说一下代码的中关键小技巧部分,虽然利用重写InputStream的Read方法可以轻松实现进度监控,但是为了绚烂UI时节约性能,可以根据实际情况选择每隔300ms或是200ms渲染一次进度,我这里就是200ms绚烂一次

UtilsFTP.IProgressListener listener = new UtilsFTP.IProgressListener() {
	long BEG=0;
	@Override
	public void onProgress(long len, long total) {
		if(System.currentTimeMillis()-BEG>200||len==total)
		{
			BEG=System.currentTimeMillis();
			String result = String.format("%.2f", 100 * (double) len / (double) total);
			showTV(result + "%");
		}
	}
};
InputStream in2 = self.getResources().getAssets().open("a.mp3");
ftp.uploadWithProgress("001test/download3/我.mp3", in2, listener);


展开阅读全文

没有更多推荐了,返回首页