国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android關(guān)于FTP文件上傳和下載功能詳解

2019-10-22 18:27:19
字體:
供稿:網(wǎng)友

本文實例為大家分享了Android九宮格圖片展示的具體代碼,供大家參考,具體內(nèi)容如下

此篇博客為整理文章,供大家學習。

1.首先下載commons-net  jar包,可以百度下載。

FTP的文件上傳和下載的工具類:

package ryancheng.example.progressbar;  import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import android.os.Environment;  public class FTPManager {  FTPClient ftpClient = null;   public FTPManager() {   ftpClient = new FTPClient();  }   // 連接到ftp服務(wù)器  public synchronized boolean connect() throws Exception {   boolean bool = false;   if (ftpClient.isConnected()) {//判斷是否已登陸    ftpClient.disconnect();   }   ftpClient.setDataTimeout(20000);//設(shè)置連接超時時間   ftpClient.setControlEncoding("utf-8");   ftpClient.connect("ip地址", 端口);   if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {    if (ftpClient.login("用戶名", "密碼")) {     bool = true;     System.out.println("ftp連接成功");    }   }   return bool;  }   // 創(chuàng)建文件夾  public boolean createDirectory(String path) throws Exception {   boolean bool = false;   String directory = path.substring(0, path.lastIndexOf("/") + 1);   int start = 0;   int end = 0;   if (directory.startsWith("/")) {    start = 1;   }   end = directory.indexOf("/", start);   while (true) {    String subDirectory = directory.substring(start, end);    if (!ftpClient.changeWorkingDirectory(subDirectory)) {     ftpClient.makeDirectory(subDirectory);     ftpClient.changeWorkingDirectory(subDirectory);     bool = true;    }    start = end + 1;    end = directory.indexOf("/", start);    if (end == -1) {     break;    }   }   return bool;  }   // 實現(xiàn)上傳文件的功能  public synchronized boolean uploadFile(String localPath, String serverPath)    throws Exception {   // 上傳文件之前,先判斷本地文件是否存在   File localFile = new File(localPath);   if (!localFile.exists()) {    System.out.println("本地文件不存在");    return false;   }   System.out.println("本地文件存在,名稱為:" + localFile.getName());   createDirectory(serverPath); // 如果文件夾不存在,創(chuàng)建文件夾   System.out.println("服務(wù)器文件存放路徑:" + serverPath + localFile.getName());   String fileName = localFile.getName();   // 如果本地文件存在,服務(wù)器文件也在,上傳文件,這個方法中也包括了斷點上傳   long localSize = localFile.length(); // 本地文件的長度   FTPFile[] files = ftpClient.listFiles(fileName);   long serverSize = 0;   if (files.length == 0) {    System.out.println("服務(wù)器文件不存在");    serverSize = 0;   } else {    serverSize = files[0].getSize(); // 服務(wù)器文件的長度   }   if (localSize <= serverSize) {    if (ftpClient.deleteFile(fileName)) {     System.out.println("服務(wù)器文件存在,刪除文件,開始重新上傳");     serverSize = 0;    }   }   RandomAccessFile raf = new RandomAccessFile(localFile, "r");   // 進度   long step = localSize / 100;   long process = 0;   long currentSize = 0;   // 好了,正式開始上傳文件   ftpClient.enterLocalPassiveMode();   ftpClient.setFileType(FTP.BINARY_FILE_TYPE);   ftpClient.setRestartOffset(serverSize);   raf.seek(serverSize);   OutputStream output = ftpClient.appendFileStream(fileName);   byte[] b = new byte[1024];   int length = 0;   while ((length = raf.read(b)) != -1) {    output.write(b, 0, length);    currentSize = currentSize + length;    if (currentSize / step != process) {     process = currentSize / step;     if (process % 10 == 0) {      System.out.println("上傳進度:" + process);     }    }   }   output.flush();   output.close();   raf.close();   if (ftpClient.completePendingCommand()) {    System.out.println("文件上傳成功");    return true;   } else {    System.out.println("文件上傳失敗");    return false;   }  }   // 實現(xiàn)下載文件功能,可實現(xiàn)斷點下載  public synchronized boolean downloadFile(String localPath, String serverPath)    throws Exception {   // 先判斷服務(wù)器文件是否存在   FTPFile[] files = ftpClient.listFiles(serverPath);   if (files.length == 0) {    System.out.println("服務(wù)器文件不存在");    return false;   }   System.out.println("遠程文件存在,名字為:" + files[0].getName());   localPath = localPath + files[0].getName();   // 接著判斷下載的文件是否能斷點下載   long serverSize = files[0].getSize(); // 獲取遠程文件的長度   File localFile = new File(localPath);   long localSize = 0;   if (localFile.exists()) {    localSize = localFile.length(); // 如果本地文件存在,獲取本地文件的長度    if (localSize >= serverSize) {     System.out.println("文件已經(jīng)下載完了");     File file = new File(localPath);     file.delete();     System.out.println("本地文件存在,刪除成功,開始重新下載");     return false;    }   }   // 進度   long step = serverSize / 100;   long process = 0;   long currentSize = 0;   // 開始準備下載文件   ftpClient.enterLocalActiveMode();   ftpClient.setFileType(FTP.BINARY_FILE_TYPE);   OutputStream out = new FileOutputStream(localFile, true);   ftpClient.setRestartOffset(localSize);   InputStream input = ftpClient.retrieveFileStream(serverPath);   byte[] b = new byte[1024];   int length = 0;   while ((length = input.read(b)) != -1) {    out.write(b, 0, length);    currentSize = currentSize + length;    if (currentSize / step != process) {     process = currentSize / step;     if (process % 10 == 0) {      System.out.println("下載進度:" + process);     }    }   }   out.flush();   out.close();   input.close();   // 此方法是來確保流處理完畢,如果沒有此方法,可能會造成現(xiàn)程序死掉   if (ftpClient.completePendingCommand()) {    System.out.println("文件下載成功");    return true;   } else {    System.out.println("文件下載失敗");    return false;   }  }   // 如果ftp上傳打開,就關(guān)閉掉  public void closeFTP() throws Exception {   if (ftpClient.isConnected()) {    ftpClient.disconnect();   }  } } 

具體實現(xiàn)看代碼注釋寫的很詳細。

一.Android中FTP文件上傳代碼:

// 上傳例子 private void ftpUpload() {  new Thread() {  public void run() {   try {   System.out.println("正在連接ftp服務(wù)器....");   FTPManager ftpManager = new FTPManager();   if (ftpManager.connect()) {   if (ftpManager.uploadFile(ftpManager.rootPath + "UpdateXZMarketPlatform.apk", "mnt/sdcard/")) {   ftpManager.closeFTP();   }   }   } catch (Exception e) {   // TODO: handle exception   // System.out.println(e.getMessage());   }  }  }.start();  } 

二.Android中FTP文件下載代碼:

// 下載例子 private void ftpDownload() {  new Thread() {  public void run() {   try {   System.out.println("正在連接ftp服務(wù)器....");   FTPManager ftpManager = new FTPManager();   if (ftpManager.connect()) {   if (ftpManager.downloadFile(ftpManager.rootPath, "20120723_XFQ07_XZMarketPlatform.db")) {   ftpManager.closeFTP();   }   }   } catch (Exception e) {   // TODO: handle exception   // System.out.println(e.getMessage());   }  }  }.start();  } 

自己之前做項目的時候?qū)戇^的FTP上傳代碼:

package com.kandao.yunbell.videocall;  import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.SocketException;  import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply;  import com.kandao.yunbell.common.SysApplication;  import android.content.Context; import android.util.Log;  public class MyUploadThread extends Thread {  private String fileName;// 文件名字  private String filePath;// 文件本地路徑  private String fileStoragePath;// 文件服務(wù)器存儲路徑  private String serverAddress;// 服務(wù)器地址  private String ftpUserName;// ftp賬號  private String ftpPassword;// ftp密碼  private Context mContext;  public MyUploadThread() {   super();   // TODO Auto-generated constructor stub  }   public MyUploadThread(Context mContext,String fileName, String filePath,     String fileStoragePath,String serverAddress,String ftpUserName,String ftpPassword) {   super();   this.fileName = fileName;   this.filePath = filePath;   this.fileStoragePath = fileStoragePath;   this.serverAddress = serverAddress;   this.ftpUserName = ftpUserName;   this.ftpPassword = ftpPassword;   this.mContext=mContext;  }   @Override  public void run() {   super.run();   try {    FileInputStream fis=null;    FTPClient ftpClient = new FTPClient();    String[] idPort = serverAddress.split(":");    ftpClient.connect(idPort[0], Integer.parseInt(idPort[1]));    int returnCode = ftpClient.getReplyCode();    Log.i("caohai", "returnCode,upload:"+returnCode);    boolean loginResult = ftpClient.login(ftpUserName, ftpPassword);    Log.i("caohai", "loginResult:"+loginResult);    if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登錄成功          // 設(shè)置上傳目錄          if (((SysApplication) mContext).getIsVideo()) {      ((SysApplication) mContext).setIsVideo(false);      boolean ff=ftpClient.changeWorkingDirectory(fileStoragePath + "/video/");      Log.i("caohai", "ff:"+ff);     }else{     boolean ee=ftpClient.changeWorkingDirectory(fileStoragePath + "/photo/");     Log.i("caohai", "ee:"+ee);     }     ftpClient.setBufferSize(1024);     // ftpClient.setControlEncoding("iso-8859-1");     // ftpClient.enterLocalPassiveMode();     ftpClient.setFileType(FTP.BINARY_FILE_TYPE);      fis = new FileInputStream(filePath + "/"       + fileName);      Log.i("caohai", "fileStoragePath00000:"+fileStoragePath);     String[] path = fileStoragePath.split("visitorRecord");          boolean fs = ftpClient.storeFile(new String((path[1]       + "/photo/" + fileName).getBytes(), "iso-8859-1"), fis);     Log.i("caohai", "shifoushangchuanchenggong:"+fs);     fis.close();     ftpClient.logout();     //ftpClient.disconnect();    } else {// 如果登錄失敗     ftpClient.disconnect();    }   } catch (NumberFormatException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (SocketException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (UnsupportedEncodingException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }   } } 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 内江市| 成武县| 阿图什市| 永定县| 延吉市| 阿克苏市| 肇东市| 焦作市| 荆门市| 胶南市| 宾阳县| 无棣县| 高青县| 黄陵县| 双峰县| 延吉市| 蛟河市| 枝江市| 临汾市| 岫岩| 淮安市| 尤溪县| 桓台县| 泰顺县| 宁国市| 余庆县| 儋州市| 治县。| 福鼎市| 南投县| 江口县| 高碑店市| 弋阳县| 阿克苏市| 青田县| 平舆县| 措勤县| 措勤县| 海宁市| 荔浦县| 嘉禾县|