基于FTP4J开源项目的使用
2015-01-06 11:03
453 查看
最近不是很忙,就想把近一年所学的一些android知识整理一下,就直接将自己所开发过的项目梳理一遍,发现也不涉及公司的机密,反正都是开源的。今天就说下FTP4J这个FTP客户端的搭建。我用的是 ftp4j-1.7.2,看一下它的框架
这个jar包网上应该有一大把,等会我会上传到csdn中。然后我们来看使用。其实也主要是工具类的编写,其他的都差不多,直接贴代码:
1,使用的时候要注意,因为大部分都是涉及网络操作,所以最好都扔线程里面跑,不然会抛异常。
2,若想做取消当前上传的话,在源码的 FTPClient 类中有这个函数 abortCurrentDataTransfer,但是我用的时候会中断当前的连接,所以执行这个操作需要重新去 连接server。
3,调用这些api操作的时候,都是在server的当前目录下操作的。所以上传、批量上传这些涉及存放路径的操作,最好先确定好当前目录再去操作。
4,大部分操作都是耗时操作,你要做好server执行不成功的准备,在用户等待这个执行过程的时间最好找点事给他们做,比如画个图给他们看或显示个进度。
这个jar包网上应该有一大把,等会我会上传到csdn中。然后我们来看使用。其实也主要是工具类的编写,其他的都差不多,直接贴代码:
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import it.sauronsoftware.ftp4j.FTPAbortedException; import it.sauronsoftware.ftp4j.FTPClient; import it.sauronsoftware.ftp4j.FTPDataTransferException; import it.sauronsoftware.ftp4j.FTPDataTransferListener; import it.sauronsoftware.ftp4j.FTPException; import it.sauronsoftware.ftp4j.FTPFile; import it.sauronsoftware.ftp4j.FTPIllegalReplyException; public class FTPClientTools { FTPClient mFtpClient; FTPFile FileList[]; private String logstr = ""; private boolean isConnect = false; private boolean isLogin = false; public FTPClientTools(String host, int port, String usr, String pwd){ initFTPClient(); if(mFtpClient != null){ FTPconnect(host,port); FTPLogin(usr,pwd); setCharSet("UTF-8"); //默认 } } /** * 初始化ftp */ public void initFTPClient(){ this.mFtpClient = new FTPClient(); } /** * 连接 */ public void FTPconnect(String host, int port){ try { mFtpClient.getConnector().setConnectionTimeout(30); mFtpClient.getConnector().setReadTimeout(30); mFtpClient.getConnector().setCloseTimeout(30); mFtpClient.connect(host, port); isConnect = true; logstr = logstr + "Connecting to FTP server " + host + " on port " + port; } catch (Exception e) { isConnect = false; logstr = e.getMessage() + "\n"; } } /** * 登陆 */ public void FTPLogin(String usr, String pwd){ try { mFtpClient.login(usr, pwd, null); isLogin = true; logstr = logstr + "user " + usr + " login in." + "\n"; } catch (Exception e) { isLogin = false; e.printStackTrace(); logstr = e.getMessage() + "\n"; } } /** * host */ public String getHost(){ if(mFtpClient != null) return mFtpClient.getHost(); return null; } /** * 设置字符集 */ public void setCharSet(String charset){ if(isLogin) mFtpClient.setCharset(charset); } /** * 注销 */ public void logout() { if (null != mFtpClient) { try { mFtpClient.logout(); mFtpClient.disconnect(true); } catch (IOException e) { e.printStackTrace(); } catch (FTPIllegalReplyException e) { e.printStackTrace(); } catch (FTPException e) { e.printStackTrace(); } } } /** * 获取错误报告 */ public String getErrLog(){ return logstr; } /** * 获取实例 */ public FTPClient getFTPInstance(){ return mFtpClient; } /** * 获取连接状态 */ public boolean getIsConnect(){ return isConnect; } /** * 获取登陆状态 */ public boolean getIsLogin(){ return isLogin; } /** * 获取列表 * */ public void FtpFileList(String path) { try { if (path != "" && path != null) { mFtpClient.changeDirectory(path); } FileList = mFtpClient.list(); FileList = sortFile(FileList); //排序 } catch (Exception e) { FileList = null; e.printStackTrace(); } } public FTPFile[] getFileList(String path){ try { if (path != "" && path != null) { mFtpClient.changeDirectory(path); return mFtpClient.list(); } }catch (Exception e) { e.printStackTrace(); return null; } return null; } /** * 上一级目录 */ public void parentFtpFileList() { try { mFtpClient.changeDirectoryUp(); FileList = mFtpClient.list(); FileList = sortFile(FileList); //排序 } catch (Exception e) { FileList = null; e.printStackTrace(); } } /** * 得到当前路径 */ public String getCurPath(){ String str = ""; if(isLogin){ try { str = mFtpClient.currentDirectory(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPIllegalReplyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return str; } /** * 跳转目录 */ public void changeDir(String str){ if (str != "" && str != null) { try { mFtpClient.changeDirectory(str); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPIllegalReplyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 上一级目录 */ public void changeUpDir(){ try { mFtpClient.changeDirectoryUp(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPIllegalReplyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 将文件数组排序,目录放在上面,文件在下面 * @param file * @return */ public FTPFile[] sortFile(FTPFile[] file) { ArrayList<FTPFile> list = new ArrayList<FTPFile>(); //放入所有目录 for (FTPFile f : FileList) { if (f.getType() == 1){ list.add(f); } } //放入所有文件 for (FTPFile f : FileList) { if (f.getType() == 0){ list.add(f); } } return list.toArray(new FTPFile[file.length]); } /** * 得到列表方法 */ public FTPFile[] getFtpFileList(){ return FileList; } /** * 重命名 src-->dst * @param src * @param dst */ public void RenameFTPfile(String src, String dst){ try { mFtpClient.rename(src,dst); } catch (Exception e) { e.printStackTrace(); } } /** * 新建文件夹 */ public void NewFolder(String dst){ try { mFtpClient.createDirectory(dst); } catch (Exception e) { e.printStackTrace(); } } /** * 删除目录 * * @param client * FTP客户端对象 * @param url * FTP URL * @throws Exception */ public void deleteFolder(String path){ try { mFtpClient.changeDirectory(path); FTPFile[] files = mFtpClient.list(); String name = null; for (FTPFile file : files) { name = file.getName(); // 排除隐藏目录 if (".".equals(name) || "..".equals(name)) { continue; } if (file.getType() == FTPFile.TYPE_DIRECTORY) { // 递归删除子目录 deleteFolder(file.getName()); } else if (file.getType() == FTPFile.TYPE_FILE) { // 删除文件 mFtpClient.deleteFile(file.getName()); } } mFtpClient.changeDirectoryUp(); mFtpClient.deleteDirectory(path); // 删除当前目录 } catch (Exception e) { e.printStackTrace(); } } /** * 删除文件 * @param path */ public void deleteFile(String path){ try { mFtpClient.deleteFile(path); } catch (Exception e) { e.printStackTrace(); } } /** * 上传 * path为空时,默认当前路径 */ public void FTPupload(File srcfile,String path,FTPDataTransferListener UpLoadListener){ if (srcfile.exists()) { if(path != ""){ try { mFtpClient.changeDirectory(path); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPIllegalReplyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { mFtpClient.upload(srcfile, UpLoadListener); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPIllegalReplyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPDataTransferException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPAbortedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 下载 */ public void FTPdownload(String remotepath, String localpath, FTPDataTransferListener DownLoadListener){ File file = new File(localpath); try { mFtpClient.download(remotepath, file, DownLoadListener); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPIllegalReplyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPDataTransferException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FTPAbortedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
1,使用的时候要注意,因为大部分都是涉及网络操作,所以最好都扔线程里面跑,不然会抛异常。
2,若想做取消当前上传的话,在源码的 FTPClient 类中有这个函数 abortCurrentDataTransfer,但是我用的时候会中断当前的连接,所以执行这个操作需要重新去 连接server。
3,调用这些api操作的时候,都是在server的当前目录下操作的。所以上传、批量上传这些涉及存放路径的操作,最好先确定好当前目录再去操作。
4,大部分操作都是耗时操作,你要做好server执行不成功的准备,在用户等待这个执行过程的时间最好找点事给他们做,比如画个图给他们看或显示个进度。
相关文章推荐
- 基于LGPL开源项目 Log4cpp安装与使用
- 一款基于网易云音乐 UI,使用 Gank.Io 及豆瓣 api 开发的符合 Google Material Design 的 Android 开源项目.
- 基于LGPL开源项目 Log4cpp安装与使用
- 基于LGPL开源项目 Log4cpp安装与使用(二)(代码详解)
- 基于LGPL开源项目 Log4cpp安装与使用
- 基于LGPL开源项目 Log4cpp安装与使用
- 基于LGPL开源项目 Log4cpp安装与使用
- 基于LGPL开源项目 Log4cpp安装与使用
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(三):地图渲染分析
- 使用MOno Cecil 的相关开源项目
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(八):怎样对SharpMap进行扩展开发——从许可角度来谈
- 使用MOno Cecil 的相关开源项目
- 使用MOno Cecil 的相关开源项目
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(一):第一次亲密接触
- 基于.NET的开源GIS项目
- 使用Bison和Flex(Windows下的基于GNU开源的Yacc和Lex)
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(六):SharpMap的功能扩展之路
- [转]Java的开源项目:简单介绍Log4J的使用
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(五):WebGIS原理分析及思考