日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Android使用ftp方式實(shí)現(xiàn)文件上傳和下載功能

瀏覽:206日期:2022-09-23 16:16:03

近期在工作上一直再維護(hù)平臺OTA在線升級項(xiàng)目,其中關(guān)于這個(gè)升級文件主要是存放于ftp服務(wù)器上的,然后客戶端通過走ftp協(xié)議方式下載至本地Android機(jī)進(jìn)行一個(gè)系統(tǒng)升級操作。那么今天將對ftp實(shí)現(xiàn)文件上傳和下載進(jìn)行一個(gè)使用總結(jié),關(guān)于ftp這方面的理論知識如果不是太了解的各位道友,那么請移步HTTP和FTP的區(qū)別的一些理論知識 作個(gè)具體的了解或者查閱相關(guān)資料。那么先看看個(gè)人工作項(xiàng)目這個(gè)OTA升級效果圖吧。如下:

Android使用ftp方式實(shí)現(xiàn)文件上傳和下載功能

下面是具體的接口實(shí)現(xiàn):

Android使用ftp方式實(shí)現(xiàn)文件上傳和下載功能

那么相關(guān)ftp的操作,已經(jīng)被封裝到ota.ftp這個(gè)包下,各位童鞋可以下載示例代碼慢慢研究。另外這個(gè)要是用ftp服務(wù)我們cline端需要再項(xiàng)目工程導(dǎo)入ftp4j-1.7.2.jar包

這邊作個(gè)使用的邏輯分析:首先在我們的項(xiàng)目工程FtpApplication中啟動這個(gè)OtaService,其中OtaService作為一個(gè)服務(wù)運(yùn)行起來,在這個(gè)服務(wù)里面拿到封裝好ftp相關(guān)接口的DownLoad.java進(jìn)行ftp文件操作,關(guān)鍵代碼如下:

public void startDownload() { // TODO Auto-generated method stub mDownLoad.start(); } public void stopDownload() { mDownLoad.stop(); } public void cancel() { mDownLoad.cancel(); } public String getOldDate() { return mDownLoad.getDatabaseOldDate(); } public String getOldVersion() { return mDownLoad.getDatabaseOldVersion(); } public void checkVer(String serverRoot) { // TODO Auto-generated method stub mDownLoad = DownLoad.getInstance(); mDownLoad.setServeRoot(serverRoot); mDownLoad.setFtpInfo(mApp.mFtpInfo); mDownLoad.checkUpgrade(); }

FTPToolkit.java

package com.asir.ota.ftp;import it.sauronsoftware.ftp4j.FTPClient; import it.sauronsoftware.ftp4j.FTPFile;import java.io.File;import java.util.List;import com.asir.ota.clinet.PathToolkit;import com.asir.ota.ftp.DownLoad.MyFtpListener;/** * FTP客戶端工具 * */public final class FTPToolkit { private FTPToolkit() { } /** * 創(chuàng)建FTP連接 * * @param host * 主機(jī)名或IP * @param port * ftp端口 * @param username * ftp用戶名 * @param password * ftp密碼 * @return 一個(gè)客戶端 * @throws Exception */ public static FTPClient makeFtpConnection(String host, int port, String username, String password) throws Exception { FTPClient client = new FTPClient(); try { client.connect(host, port); if(username != null && password != null) { client.login(username, password); } } catch (Exception e) { throw new Exception(e); } return client; }/** * FTP下載文件到本地一個(gè)文件夾,如果本地文件夾不存在,則創(chuàng)建必要的目錄結(jié)構(gòu) * * @param client * FTP客戶端 * @param remoteFileName * FTP文件 * @param localPath * 存的本地文件路徑或目錄 * @throws Exception */ public static void download(FTPClient client, String remoteFileName, String localPath, long startPoint, MyFtpListener listener) throws Exception { String localfilepath = localPath; int x = isExist(client, remoteFileName); File localFile = new File(localPath); if (localFile.isDirectory()) { if (!localFile.exists()) localFile.mkdirs(); localfilepath = PathToolkit.formatPath4File(localPath + File.separator + new File(remoteFileName).getName()); } if (x == FTPFile.TYPE_FILE) { try { if (listener != null) client.download(remoteFileName, new File(localfilepath), startPoint, listener); else client.download(remoteFileName, new File(localfilepath), startPoint); } catch (Exception e) { throw new Exception(e); } } else { throw new Exception('the target ' + remoteFileName + 'not exist'); } }/** * FTP上傳本地文件到FTP的一個(gè)目錄下 * * @param client * FTP客戶端 * @param localfile * 本地文件 * @param remoteFolderPath * FTP上傳目錄 * @throws Exception */ public static void upload(FTPClient client, File localfile, String remoteFolderPath, MyFtpListener listener) throws Exception { remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath); try { client.changeDirectory(remoteFolderPath); if (!localfile.exists()) throw new Exception('the upload FTP file' + localfile.getPath() + 'not exist!'); if (!localfile.isFile()) throw new Exception('the upload FTP file' + localfile.getPath() + 'is a folder!'); if (listener != null) client.upload(localfile, listener); else client.upload(localfile); client.changeDirectory('/'); } catch (Exception e) { throw new Exception(e); } }/** * FTP上傳本地文件到FTP的一個(gè)目錄下 * * @param client * FTP客戶端 * @param localfilepath * 本地文件路徑 * @param remoteFolderPath * FTP上傳目錄 * @throws Exception */ public static void upload(FTPClient client, String localfilepath, String remoteFolderPath, MyFtpListener listener) throws Exception { File localfile = new File(localfilepath); upload(client, localfile, remoteFolderPath, listener); }/** * 批量上傳本地文件到FTP指定目錄上 * * @param client * FTP客戶端 * @param localFilePaths * 本地文件路徑列表 * @param remoteFolderPath * FTP上傳目錄 * @throws Exception */ public static void uploadListPath(FTPClient client, List<String> localFilePaths, String remoteFolderPath, MyFtpListener listener) throws Exception { remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath); try { client.changeDirectory(remoteFolderPath); for (String path : localFilePaths) { File file = new File(path); if (!file.exists()) throw new Exception('the upload FTP file' + path + 'not exist!'); if (!file.isFile()) throw new Exception('the upload FTP file' + path + 'is a folder!'); if (listener != null) client.upload(file, listener); else client.upload(file); } client.changeDirectory('/'); } catch (Exception e) { throw new Exception(e); } }/** * 批量上傳本地文件到FTP指定目錄上 * * @param client * FTP客戶端 * @param localFiles * 本地文件列表 * @param remoteFolderPath * FTP上傳目錄 * @throws Exception */ public static void uploadListFile(FTPClient client, List<File> localFiles, String remoteFolderPath, MyFtpListener listener) throws Exception { try { client.changeDirectory(remoteFolderPath); remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath); for (File file : localFiles) { if (!file.exists()) throw new Exception('the upload FTP file' + file.getPath() + 'not exist!'); if (!file.isFile()) throw new Exception('the upload FTP file' + file.getPath() + 'is a folder!'); if (listener != null) client.upload(file, listener); else client.upload(file); } client.changeDirectory('/'); } catch (Exception e) { throw new Exception(e); } }/** * 判斷一個(gè)FTP路徑是否存在,如果存在返回類型(FTPFile.TYPE_DIRECTORY=1、FTPFile.TYPE_FILE=0、 * FTPFile.TYPE_LINK=2) 如果文件不存在,則返回一個(gè)-1 * * @param client * FTP客戶端 * @param remotePath * FTP文件或文件夾路徑 * @return 存在時(shí)候返回類型值(文件0,文件夾1,連接2),不存在則返回-1 */ public static int isExist(FTPClient client, String remotePath) { remotePath = PathToolkit.formatPath4FTP(remotePath); FTPFile[] list = null; try { list = client.list(remotePath); } catch (Exception e) { return -1; } if (list.length > 1) return FTPFile.TYPE_DIRECTORY; else if (list.length == 1) { FTPFile f = list[0]; if (f.getType() == FTPFile.TYPE_DIRECTORY) return FTPFile.TYPE_DIRECTORY; // 假設(shè)推理判斷 String _path = remotePath + '/' + f.getName(); try { int y = client.list(_path).length; if (y == 1) return FTPFile.TYPE_DIRECTORY; else return FTPFile.TYPE_FILE; } catch (Exception e) { return FTPFile.TYPE_FILE; } } else { try { client.changeDirectory(remotePath); return FTPFile.TYPE_DIRECTORY; } catch (Exception e) { return -1; } } }public static long getFileLength(FTPClient client, String remotePath) throws Exception { String remoteFormatPath = PathToolkit.formatPath4FTP(remotePath); if(isExist(client, remotePath) == 0) { FTPFile[] files = client.list(remoteFormatPath); return files[0].getSize(); }else { throw new Exception('get remote file length error!'); } } /** * 關(guān)閉FTP連接,關(guān)閉時(shí)候像服務(wù)器發(fā)送一條關(guān)閉命令 * * @param client * FTP客戶端 * @return 關(guān)閉成功,或者鏈接已斷開,或者鏈接為null時(shí)候返回true,通過兩次關(guān)閉都失敗時(shí)候返回false */ public static boolean closeConnection(FTPClient client) { if (client == null) return true; if (client.isConnected()) { try { client.disconnect(true); return true; } catch (Exception e) { try { client.disconnect(false); } catch (Exception e1) { e1.printStackTrace(); return false; } } } return true; }}

包括登錄,開始下載,取消下載,獲取升級文件版本號和服務(wù)器版本校驗(yàn)等。其它的是一些數(shù)據(jù)庫,SD卡文件相關(guān)操作,那么最后在我們下載完成之后需要對文件進(jìn)行一個(gè)文件解壓再執(zhí)行升級操作,這部分在ZipExtractor.java和OTAProvider.java中實(shí)現(xiàn)

示例代碼點(diǎn)擊下載

總結(jié)

到此這篇關(guān)于Android使用ftp方式實(shí)現(xiàn)文件上傳和下載的文章就介紹到這了,更多相關(guān)android ftp文件上傳下載內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
波多野结衣一区| 97精品一区| 99成人在线| 99国产精品久久久久久久成人热 | 精品国产三区在线| 加勒比视频一区| 久久国产亚洲| 亚洲一卡久久| 日韩av网站在线观看| 欧美精品1区| 国产成年精品| 激情综合网址| 日韩成人一级| 欧产日产国产精品视频| 狠狠干综合网| 国产精品麻豆成人av电影艾秋| 国产福利91精品一区二区| 99久久久久| 日本亚洲三级在线| 老司机精品视频网| 黑丝一区二区三区| 免费看久久久| 久久99伊人| 精品网站aaa| 国产亚洲福利| 美日韩一区二区三区| 日本精品影院| 日本不卡在线视频| 精品捆绑调教一区二区三区| 免费精品视频最新在线| 久久香蕉精品香蕉| 亚洲一区不卡| 在线人成日本视频| 日韩国产一二三区| 国产盗摄——sm在线视频| 免费在线看一区| 美腿丝袜亚洲三区| 日韩视频免费| 国产一区二区久久久久| 视频一区二区欧美| 精品国产午夜肉伦伦影院| 噜噜噜躁狠狠躁狠狠精品视频| 麻豆国产精品777777在线| 美日韩精品视频| 成午夜精品一区二区三区软件| 蜜臀91精品一区二区三区| 蜜臀久久精品| 国产精品白丝一区二区三区| 欧美精品一卡| 91中文字幕精品永久在线| 69堂精品视频在线播放| 午夜久久美女| 亚洲在线国产日韩欧美| 国产伦久视频在线观看| 欧美日韩1区| 免费国产自久久久久三四区久久 | 亚洲免费专区| 国产精品av一区二区| 国产一区二区三区四区五区传媒| 日韩视频一二区| 国产韩日影视精品| 三级在线看中文字幕完整版| 欧美国产视频| 久久国际精品| 亚洲日本国产| 亚洲一区观看| 女同性一区二区三区人了人一| 欧美精品日日操| 久久精品欧洲| 免费精品一区| 麻豆91在线播放| 国产精品黄网站| 97精品资源在线观看| 蜜桃传媒麻豆第一区在线观看 | 国产欧美日韩影院| 蜜臀精品一区二区三区在线观看| 亚洲国产专区校园欧美| 精品亚洲成人| 麻豆精品视频在线观看免费| 国产精品日韩精品中文字幕| 日韩精品免费一区二区夜夜嗨| 免费在线看一区| 亚洲影视一区二区三区| 亚洲一区二区三区高清不卡| 欧美特黄一区| 午夜亚洲一区| 少妇精品久久久| 日本不卡视频一二三区| 日本欧美大码aⅴ在线播放| 亚洲资源在线| 日韩一区二区三区精品| 日韩欧美精品一区二区综合视频| 国产国产精品| 国产一区导航| 日韩在线观看中文字幕| 日韩av网站在线免费观看| 日韩欧美三区| 久久99久久久精品欧美| 福利一区和二区| 成人看片网站| 一区在线免费观看| 视频一区中文字幕精品| 日韩av电影一区| 美女视频黄 久久| 成人高清一区| 美女网站一区| 视频一区日韩| 国产精品jk白丝蜜臀av小说| 免费亚洲婷婷| 91av亚洲| 鲁大师成人一区二区三区| 亚洲精品护士| 国产精品一卡| 精精国产xxxx视频在线野外| 午夜国产精品视频| 亚洲精品三级| 美女性感视频久久| 国产精品字幕| 蜜臀a∨国产成人精品| 国产探花在线精品一区二区| 国产一区2区| 日韩亚洲在线| 日韩激情av在线| 国产+成+人+亚洲欧洲在线| 欧美日韩国产精品一区二区亚洲| 亚洲tv在线| 97国产成人高清在线观看| 亚洲欧洲午夜| 国产精品地址| 久久视频精品| 日本强好片久久久久久aaa| 成人在线黄色| 丝袜美腿成人在线| 国产精品久久久久久久久久齐齐 | 国产精品尤物| 成人亚洲欧美| 视频一区国产视频| 国产成人精品一区二区三区免费| 91精品精品| 亚洲欧洲日韩| 精品三级av| 免费看黄色91| 香蕉视频亚洲一级| 日韩av中文字幕一区| 欧美日韩一区二区综合| 国产欧美日韩| 午夜国产精品视频免费体验区| 国产精品伊人| 亚洲一区黄色| 日韩免费一区| 亚洲精品第一| 蜜桃视频欧美| 精品国产欧美日韩| 亚洲精品美女91| av综合电影网站| 日本aⅴ精品一区二区三区 | 国产欧美高清视频在线| 欧美日韩一区二区综合| 国产精品白浆| 欧美资源在线| 吉吉日韩欧美| 欧美亚洲一级| 影音国产精品| 日韩免费福利视频| 欧美激情视频一区二区三区免费 | 日韩中文字幕1| 久久久噜噜噜| 麻豆国产欧美一区二区三区| 一区二区国产在线| 不卡av一区二区| 91看片一区| 精品国产亚洲一区二区在线观看| 亚洲精品一二| 亚洲欧洲一区| 国户精品久久久久久久久久久不卡 | 欧美久久精品| 视频一区视频二区中文| 香蕉久久精品| av综合电影网站| 国产精品白丝av嫩草影院| 免费视频一区二区| 亚洲一区日韩在线| 国产精品av久久久久久麻豆网| 福利在线一区| 九九99久久精品在免费线bt| 中文字幕亚洲影视| 麻豆9191精品国产| 亚洲欧美日韩精品一区二区| 蜜臀91精品国产高清在线观看| 特黄毛片在线观看| 国产乱码午夜在线视频| 欧美xxxx性| 国产欧美久久一区二区三区| 日韩国产欧美在线视频| 亚洲日本免费电影| 日韩美女精品| 69堂免费精品视频在线播放| 国产调教精品| 国产伦精品一区二区三区在线播放 | 麻豆极品一区二区三区|