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.记得
5.注意FTP服务起如果和客户端长时间没有信息交互可能会自动断开当前连接,所以根据实际情况每隔一段时间调用FTPClient类下的sendNoOp()方法这类似于心跳包。
下面是正餐直接上Demo效果图,有图有真相呵呵,功能一目了然,上传下载都有进度条,贴出源码下载地址,只要1分。
我封装一个工具类UitlsFTP(见源码),来处理FTP的连接,上传/下载,都是带进度的额
说一下代码的中关键小技巧部分,虽然利用重写InputStream的Read方法可以轻松实现进度监控,但是为了绚烂UI时节约性能,可以根据实际情况选择每隔300ms或是200ms渲染一次进度,我这里就是200ms绚烂一次
UtilsFTP.IProgressListener listener = new UtilsFTP.IProgressListener() {long BEG=0;@Overridepublic 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);
更多相关文章
- Android百度地图使用之定位和地理、反地理编码
- 设置android编码格式与包的引入格式于源码一致
- Android(安卓)谷歌gcm推送所需要的端口
- Android进度条——ProgressDialog
- Android(安卓)SeekBar
- Android(安卓)web界面丝滑进度条
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- Android(安卓)百分比、水波、流量剩余进度球的实现
- android APK签名过程之MANIFEST.MF分析