Android通過ftp上傳、下載檔案
阿新 • • 發佈:2019-01-28
在開發中有可能會遇到通過ftp協議來上傳和下載檔案,網上也有很多的帖子,但大部分都沒什麼用,通過參考其他和自己思考寫了兩個經測試可用的方法,這兩個方法需要一個commons-net-3.x的jar包,具體可以去這裡下載,裡面是我放的一些常用的jar包,會持續更新。下面具體看一下實現的方法。
1.上傳檔案
/** * ftp上傳 * @param url ftp地址 * @param port ftp連線埠號 * @param username 登入使用者名稱 * @param password 登入密碼 * @param fileNamePath 本地檔案儲存路徑 * @param fileName 本地檔名 * @return */ public static String ftpUpload(String url, String port, String username,String password, String fileNamePath,String fileName){ FTPClient ftpClient = new FTPClient(); FileInputStream fis = null; String returnMessage = "0"; try { ftpClient.connect(url, Integer.parseInt(port)); boolean loginResult = ftpClient.login(username, password); int returnCode = ftpClient.getReplyCode(); if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登入成功 ftpClient.setBufferSize(1024); ftpClient.setControlEncoding("UTF-8"); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); fis = new FileInputStream(fileNamePath + fileName); ftpClient.storeFile(fileName, fis); returnMessage = "1"; //上傳成功 } else {// 如果登入失敗 returnMessage = "0"; } } catch (IOException e) { e.printStackTrace(); // throw new RuntimeException("FTP客戶端出錯!", e); returnMessage = "-1"; } finally { //IOUtils.closeQuietly(fis); try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("關閉FTP連線發生異常!", e); } } return returnMessage; }
2.下載檔案
/** * ftp下載 * @param url * @param port * @param username * @param password * @param filePath 存放檔案的路徑 * @param FTP_file 要下載的檔名 * @param SD_file 本地檔名 */ public static String ftpDown(String url, int port, String username,String password, String filePath,String FTP_file,String SD_file){ BufferedOutputStream buffOut = null; FTPClient ftpClient = new FTPClient(); String returnMessage = "0"; try { ftpClient.connect(url, port); boolean loginResult = ftpClient.login(username, password); int returnCode = ftpClient.getReplyCode(); if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登入成功 ftpClient.setBufferSize(1024); ftpClient.setControlEncoding("UTF-8"); ftpClient.enterLocalPassiveMode(); buffOut = new BufferedOutputStream(new FileOutputStream(filePath+SD_file),8*1024); ftpClient.retrieveFile(FTP_file, buffOut); buffOut.flush(); buffOut.close(); ftpClient.logout(); ftpClient.disconnect(); returnMessage = "1"; //上傳成功 } else {// 如果登入失敗 returnMessage = "0"; } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("FTP客戶端出錯!", e); } finally { //IOUtils.closeQuietly(fis); try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("關閉FTP連線發生異常!", e); } } return returnMessage; }