Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍

(uploadanddownload) , browsethe remote FTPsite(directorylistingincluded),create,delete,

renameandmoveremotedirectoriesandfiles.

关于FTP连接主要有如下几种方式:

The ftp4j library can connect the remote FTP server:

· Througha direct TCP/IPconnection. 一般就是直接连接了。

· ThroughaFTP proxy. FTP代理

· Tunnelling through aHTTPproxy. HTTP代理

· ThroughaSOCKS 4/4aproxy.

· ThroughaSOCKS 5 proxy.

· You can add support to otherproxies plugging your own connector, since the ftp4jconnection manager

architecture is modular.

2、主要类简介

下面根据官网的描述,将该ftp4j库的主要类简单说明下:

FTPClient类

该类封装了对FTPCommand的请求操作。例如:连接FTP服务器、进行各种各样的FTP操作(上传、下载、

删除、重命名文件 等)。基本使用流程图如下:

利用伪代码描述如下:

//1、登录至FTPp服务器mFTPClient.connect(mFTPHost, mFTPPort);//2、请求授权mFTPClient.login(mFTPUser, mFTPPassword);//3、各种FTP操作mFTPClient.upload();mFTPClient.download();//4、断开FTP连接mFTPClient.disconnect();

throws java.lang.IllegalStateException,

throws java.lang.IllegalStateException,

我们的FTP客户端主要功能为:

①、显示特定目录列表;

②、删除文件以及文件夹,下载文件;

③、上传文件。

主要代码如下:

/** * * @author jun.qin * {@link} * */public class FtpMainActivity extends Activity implements OnClickListener {private static String TAG = CopyOfFtpMainActivity.class.getName();private CmdFactory mCmdFactory;private FTPClient mFTPClient;private ExecutorService mThreadPool;@Overrideprotected void onDestroy() {mDameonRunning = false ;Thread thread = new Thread(mCmdFactory.createCmdDisConnect()) ;thread.start();//等待连接中断try {thread.join(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}mThreadPool.shutdownNow();super.onDestroy();}//put线程池中执行private void executeConnectRequest() {mThreadPool.execute(mCmdFactory.createCmdConnect());}private void executeDisConnectRequest() {mThreadPool.execute(mCmdFactory.createCmdDisConnect());}private void executePWDRequest() {mThreadPool.execute(mCmdFactory.createCmdPWD());}private void executeLISTRequest() {mThreadPool.execute(mCmdFactory.createCmdLIST());}//创建FtpCmd的工厂类public class CmdFactory {public FtpCmd createCmdConnect() {return new CmdConnect();}public FtpCmd createCmdDisConnect() {return new CmdDisConnect();}}//继承了Runnable接口public abstract class FtpCmd implements Runnable {public abstract void run();}//连接命令public class CmdConnect extends FtpCmd {@Overridepublic void run() {boolean errorAndRetry = false ; //根据不同的异常类型,是否重新捕获try {String[] welcome = mFTPClient.connect(mFTPHost, mFTPPort);if (welcome != null) {for (String value : welcome) {logv("connect " + value);}}mFTPClient.login(mFTPUser, mFTPPassword);mHandler.sendEmptyMessage(MSG_CMD_CONNECT_OK);}catch (IllegalStateException illegalEx) {illegalEx.printStackTrace();errorAndRetry = true ;}catch (IOException ex) {ex.printStackTrace();errorAndRetry = true ;}catch (FTPIllegalReplyException e) {e.printStackTrace();}catch (FTPException e) {e.printStackTrace();errorAndRetry = true ;}if(errorAndRetry && mDameonRunning){mHandler.sendEmptyMessageDelayed(MSG_CMD_CONNECT_FAILED, 2000);}}}public class CmdDisConnect extends FtpCmd {@Overridepublic void run() {if (mFTPClient != null) {try {mFTPClient.disconnect(true);} catch (Exception ex) {ex.printStackTrace();}}}}//下载命令public class CmdDownLoad extends AsyncTask<Void, Integer, Boolean> {@Overrideprotected Boolean doInBackground(Void… params) {try {String localPath = getParentRootPath() + File.separator+ mFileList.get(mSelectedPosistion).getName();mFTPClient.download(mFileList.get(mSelectedPosistion).getName(),new File(localPath),new DownloadFTPDataTransferListener(mFileList.get(mSelectedPosistion).getSize()));} catch (Exception ex) {ex.printStackTrace();return false;}return true;}protected void onPostExecute(Boolean result) {toast(result ? "下载成功" : "下载失败");progressDialog.dismiss();}}}

第二步:运行FTP客户端,填写FTP验证时的资料(即第一步输入信息)后,连接FTP服务器即可。如图:

上帝助自助者。

Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍

相关文章:

你感兴趣的文章:

标签云: