1. 程式人生 > >Android通過ftp上傳、下載檔案

Android通過ftp上傳、下載檔案

                在開發中有可能會遇到通過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;
	}