响应式网站 手机版,做网站怎么才会被百度收录,网页跳转到其它网站,洛阳建设工程信息网站Android使用FTP实现断点续传断点续传指的是在下载或上传时#xff0c;将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分#xff0c;每一个部分采用一个线程进行上传或下载#xff0c;如果碰到网络故障#xff0c;可以从已经上传或下载的部分开始继续上传下载未…Android使用FTP实现断点续传断点续传指的是在下载或上传时将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分每一个部分采用一个线程进行上传或下载如果碰到网络故障可以从已经上传或下载的部分开始继续上传下载未完成的部分而没有必要从头开始上传下载。用户可以节省时间提高速度。我们都知道Android下使用HTTP实现断点续传很容易。因为我们在发送下载请求给服务器后服务器会将该文件的信息返回给我们。同时我们也可以设置发送文件的起始位置让服务器从该位置开始传输文件。简单介绍一下FTP(File Transfer Protocol)文件传输协议。用于Internet上的控制文件的双向传输。在FTP的使用当中用户经常遇到两个概念”下载”(Download)和”上传”(Upload)。用Internet语言来说用户可通过客户机程序向(从)远程主机上传(下载)文件。FTP没有所谓的头文件刚接触到还是有点雾水的不知从何下手。但是查询一下资料后觉得还是挺简单的只需要一个指令。多说无益给大家举个栗子- -、private Runnable mRunnable new Runnable() {Overridepublic void run() {try {try {ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器ftpClient.setControlEncoding(iso-8859-1);} catch (Exception e) {mHandler.sendEmptyMessage(DOWNLOAD_FAILED);return;}if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))return;if (ftpClient.login(ftpUser, ftpPwd)) {// 设置被动模式ftpClient.enterLocalPassiveMode();// 设置以二进制方式传输ftpClient.setFileType(FTP.BINARY_FILE_TYPE);// 检查远程文件是否存在FTPFile[] files ftpClient.listFiles(new String(ftpFileName.getBytes(GBK), iso-8859-1));int per (int) (files[0].getSize() / 100);FileOutputStream output null;InputStream input null;long localSize 0L;if (files.length 0) {// 文件不存在下载失败mHandler.sendEmptyMessage(DOWNLOAD_FAILED);return;} else {// 开始下载File file new File(strLocalFile);if (file.exists()) {// 存在开始续传localSize file.length();if (localSize files[0].getSize()) {// 下载完成mHandler.sendEmptyMessage(DOWNLOAD_SUCCESS);return;}// 从本地文件上续传output new FileOutputStream(file, true);// 将文件指向已下载的位置ftpClient.setRestartOffset(localSize);input ftpClient.retrieveFileStream(new String(ftpFileName.getBytes(GBK), iso-8859-1));progress (int) (localSize / per);mHandler.sendEmptyMessage(DOWNLOAD_UPDATE);} else {// 直接下载output new FileOutputStream(file);input ftpClient.retrieveFileStream(new String(ftpFileName.getBytes(GBK), iso-8859-1));mHandler.sendEmptyMessage(DOWNLOAD_START);}if (output null || input null) {mHandler.sendEmptyMessage(DOWNLOAD_FAILED);return;}byte[] bytes new byte[1024];int c;while ((c input.read(bytes)) ! -1) {if (isBreak) {Log.i(xxx, 已停止下载);mHandler.sendEmptyMessage(DOWNLOAD_STOP);break;}output.write(bytes, 0, c);localSize c;long nowProcess localSize / per;if (nowProcess progress) {progress nowProcess;if (progress % 1 0) {Log.i(xxx, 下载进度 progress);}mHandler.sendEmptyMessage(DOWNLOAD_UPDATE);}}input.close();output.close();if (c 0) {// 下载完成mHandler.sendEmptyMessage(DOWNLOAD_SUCCESS);} else {mHandler.sendEmptyMessage(DOWNLOAD_STOP);}}}} catch (Exception e) {try {ftpClient.disconnect();} catch (IOException e1) {e1.printStackTrace();}e.printStackTrace();}}};下面说一下使用FTP具体流程以及注意事项。1. FTP的连接以及下载操作必须放在子线程中2. ftpClient.setControlEncoding(“iso-8859-1”)设置字符编码防止出现中文乱码现象3. 获取本地已下载文件大小然后使用ftpClient.setRestartOffset(localSize)可以开始断点续传了FTP实现断点续传就这么简单完成了逃。ps我使用jar包是Apache的commons-net。实现FTP断点续传服务端的FTP也得支持断点续传的指令。 pps功力有限若有什么错误请不吝赐教谢谢