edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活。edtftpj有多种版本,分别是java、.net和js版本。对于Java版的有一个免费版本。我用的就是免费版本。其余的均为商业版本。

为了开发,先下载免费版本的开发包。
主  页:http://www.enterprisedt.com/
工具包:http://www.enterprisedt.com/products/edtftpj/download/edtftpj.zip
目前我用的是2.03。
 
在开发FTP客户端工具之前,先看看其E文的开发指南:
一、开发指南
 
1、在开发中,最核心的API在两个类中,分别是:
 
FileTransferClient  通过构建此对象来是进行FTP文件传输. 支持 "plain" FTP, i.e. RFC 959 FTP 
FTPClient  功能和FileTransferClient一样,已经被废弃. 支持 "plain" FTP, i.e. RFC 959 FTP 
 
2、连接一个FTP服务器
 
1)、构建FileTransferClient对象
 FileTransferClient ftp = new FileTransferClient();
 
2)、设置远程主机和用户认证
 ftp.setRemoteHost(host);
 ftp.setUserName(username);
 ftp.setPassword(password);
 ftp.setRemotePort(21);
 ftp.setTimeout(1200);
 
3)、登录到服务器
 ftp.connect();
 
4)、关闭连接
 ftp.disconnect();
 
3、设置更多的连接属性
 
1)、设置自动登录
 ftp.getAdvancedFTPSettings().setAutoLogin(false);
 
2)、设置传输缓冲区
 ftp.getAdvancedSettings().setTransferBufferSize(1024)
 
3)、设置获取服务器端信息时所使用的编码
 ftp.getAdvancedSettings().setControlEncoding("GBK");
 
4)、设置传输通知的时间间隔
 ftp.getAdvancedSettings().setTransferNotifyInterval(5000);
5)、其他的一些设置
 ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.ACTIVE);
 ftp.getAdvancedFTPSettings().setActivePortRange(61500, 61510);
 ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
 
4、改变当前的工作目录
1)、获取当前的ftp工作目录
 string directory = ftp.getRemoteDirectory();
2)、改变当前的工作目录
 ftp.changeDirectory(directory);
3)、改变当前的工作目录为其父目录
 ftp.changeToParentDirectory();
 
5、上传与下载、暂停
1)、上传
 ftp.uploadFile(java.lang.String localFileName, java.lang.String remoteFileName)
2)、下载
 ftp.downloadFile(java.lang.String localFileName, java.lang.String remoteFileName)
3)、暂停所有的传输
 ftp.cancelAllTransfers()
 
当然,以上很多方法都有多中重载格式。下面给出一个简单封装的JavaFTP客户端工具:
 
二、封装的客户端工具
import com.enterprisedt.net.ftp.FTPException;
import com.enterprisedt.net.ftp.FTPFile;
import com.enterprisedt.net.ftp.FileTransferClient;
import com.enterprisedt.net.ftp.WriteMode;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import java.io.File;
import java.io.IOException;
import java.text.ParseException; /**
* edtftpj-2.0.3 工具简单封装测试
*
* @author leizhimin 2008-9-19 13:33:03
*/
public class FtpUtil {
private static Log log = LogFactory.getLog(FtpUtil.class);
private FileTransferClient client = null; public static void main(String[] args) throws FTPException, IOException {
FtpUtil ftp = new FtpUtil();
// ftp.connectServer();
File file = new File("C:\\ooo\\upx");
UploadListener listener = new UploadListener(ftp.client);
ftp.ftpUploadFolder(file, listener); ftp.ftpDownload("c:\\new1111.gif", "/upx/down.gif"); ftp.disconnect();
} public FtpUtil() {
this.connectServer();
} public FileTransferClient getClient() {
return client;
} /**
* 连接ftp服务器
*
* @return 连接成功标识
*/
public boolean connectServer() {
boolean flag = false;
client = new FileTransferClient();
try {
client.setUserName("admin");
client.setPassword("123");
client.setRemoteHost("localhost");
client.setRemotePort(21);
client.setTimeout(1200); client.setEventListener(new UploadListener(client));
client.getAdvancedSettings().setTransferBufferSize(1000);
client.getAdvancedSettings().setTransferNotifyInterval(5000);
client.getAdvancedSettings().setControlEncoding("GBK");
client.connect();
flag = true; } catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return flag;
} /**
* 关闭FTP客户端连接
*
* @return 关闭成功标识
*/
public boolean disconnect() {
boolean flag = false;
try {
client.disconnect();
flag = true;
} catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return flag;
} /**
* 上传文件
*
* @param file 文件
* @param ul 监听器
*/
public void ftpUploadFile(File file, UploadListener ul) {
String fileName = file.getName();
String filePath = file.getPath();
try {
client.uploadFile(filePath, fileName, WriteMode.RESUME);
int len = (int) client.getSize(fileName);
log.info("上传文件" + filePath + "完成,大小为" + len + "字节!");
} catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 上传文件(夹)
*
* @param file 上传文件
* @param ul 上传监听器
*/
public void ftpUploadFolder(File file, UploadListener ul) {
if (file.isFile()) {
ftpUploadFile(file, ul);
}
try {
if (file.isDirectory()) {
FTPFile[] ftpFiles = client.directoryList();
boolean isExist = false;
//遍历FTP当前目录的文件文件名,如果存在则停止查找,如果不存在则设计标记为不存在
for (FTPFile ftpFile : ftpFiles) {
if (ftpFile.getName().equals(file.getName())) {
isExist = true;
break;
}
}
//如果要上传的目录不存在,则创建上传目录
if (!isExist) {
client.createDirectory(file.getName());
}
//设置当前目录
client.changeDirectory(file.getName()); //上传文件的列表
File[] upFiles = file.listFiles();
for (File upFile : upFiles) {
if (upFile.isFile()) {
ftpUploadFile(upFile, ul);
} else if (upFile.isDirectory()) {
ftpUploadFolder(upFile, ul);
}
}
client.changeToParentDirectory();
}
} catch (FTPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
} /**
* 下载文件
*
* @param localFileName 本地文件名
* @param remoteFileName 远程文件名
* @throws FTPException
* @throws IOException
*/
public void ftpDownload(String localFileName, String remoteFileName) throws FTPException, IOException {
client.downloadFile(localFileName, remoteFileName, WriteMode.OVERWRITE);
}
}
import com.enterprisedt.net.ftp.EventAdapter;
import com.enterprisedt.net.ftp.FileTransferClient; /**
* 上传过程监听类
*
* @author leizhimin 2008-9-22 16:05:53
*/
class UploadListener extends EventAdapter {
private long bytesTransferred = 0;
private FileTransferClient ftpClient; public UploadListener(FileTransferClient ftpClient) {
this.ftpClient = ftpClient;
} public void bytesTransferred(String connId, String remoteFilename, long bytes) {
bytesTransferred = bytes;
}
}

运行结果:

2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile
信息: 上传文件C:\ooo\upx\1\12\12.txt完成,大小为0字节!
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile
信息: 上传文件C:\ooo\upx\1\11\11.txt完成,大小为0字节!
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile
信息: 上传文件C:\ooo\upx\1\1.txt完成,大小为0字节!
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile
信息: 上传文件C:\ooo\upx\1\新建 FDF Document.fdf完成,大小为0字节!
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile
信息: 上传文件C:\ooo\upx\1\新建 WinRAR 压缩文件.rar完成,大小为20字节!
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile
信息: 上传文件C:\ooo\upx\aa.fdf完成,大小为0字节! Process finished with exit code 0

以上代码上传支持文件夹操作。

本文转自:http://lavasoft.blog.51cto.com/62575/101108/

用edtftpj实现Java FTP客户端工具的更多相关文章

  1. FTP 客户端工具(支持 Windows/Unix/Linux)

    FTP 客户端工具,支持 Windows/Unix/Linux

  2. Java FTP客户端开源类库 edtFTPj

    edtFTPj/Free是免费的流行的Java FTP库,全球公司依靠edtFTPj /Free 为它们的Java应用程序添加FTP客户端功能. (收费的支持SFTP.FTPS的edtFTPj/PRO ...

  3. FTP客户端工具

    推荐使用8UFTP.小.快.好! 8UFTP工具分为8UFTP客户端工具和 8UFTP智能扩展服务端工具,涵盖其它FTP工具所有的功能.不占内存,体积小,多线程,支持在线解压缩.界面友好,操作简单,可 ...

  4. 普通的java Ftp客户端的文件上传

    关于ftp上传文件其实并不难,但有时候面对现实的环境还是很蛋疼的,今天我就分享一下,普通的上传文件文件至FTP的方式,它满足大部分FTP,但也有特别的,下篇博客会提及到. 下面我用一个FtpUtil, ...

  5. 自动扫描FTP文件工具类 ScanFtp.java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  6. Java客户端工具选择:HTML?Swing?XML?

    整理下面的文章是因为个人觉得写的很好,关于java的客户端了解也并不是太多.看了下面的文章觉得很有必要贴出来,方便自己以后了解java客户端编程. Java软件设计师和管理人员经常会面临这样的难题:在 ...

  7. ftp、sftp、vsftp、vsftpd、lftp以及一些网络客户端工具命令

    ftp 是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.了解更多ftp lftp :是一个 ...

  8. Java ftp 上传文件和下载文件

    今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...

  9. Java FTP 基本操作

    最近工作中用到了 FTP 相关的操作,所以借此机会了解了下具体内容. FTP基础 关于 FTP 基础推荐阅读<使用 Socket 通信实现 FTP 客户端程序>,其中需要特别注意的是主动模 ...

随机推荐

  1. 面向侧面的程序设计AOP-------《二》本质

    本文转载自张逸:晴窗笔记 AOP技术本质 2.2.1 技术概览 AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Prog ...

  2. tcp粘包问题(封包)

    tcp粘包分析     http://blog.csdn.net/zhangxinrun/article/details/6721495 解决TCP网络传输“粘包”问题(经典)       http: ...

  3. canvas实践小实例一 —— 画板工具

    前面讲了一部分的canvasAPI的基础知识,光看API的介绍确实是很无趣乏味,需要一点可以激发内心的激情的东西来激励自己来学习,于是就了伴随canvasAPI学习的小实例,这样通过API的知识,结合 ...

  4. ShortestPath:Wormholes(POJ 3259)

    田里的虫洞 题目大意:就是这个农夫的田里有一些虫洞,田有很多个点,点与点之间会存在路,走过路需要时间,并且这些点存在虫洞,可以使农夫的时间退回到时间之前,问你农夫是否真的能回到时间之前? 读完题:这一 ...

  5. codeforces A. Group of Students 解题报告

    题目链接:http://codeforces.com/problemset/problem/357/A 题目意思:将一堆人分成两组:beginners 和 intermediate coders .每 ...

  6. Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案

    我用的Maven版本为最新版:3.3.9,但是我执行一个简单的clean命令会报如下错误: Exception in thread "main" java.lang.Unsuppo ...

  7. sublime text 3 使用过程总结记录

    自定义的设置: "save_on_focus_lost": true //在文件失去焦点的时候自动保存

  8. Maven使用笔记(四)pom.xml配置详解

    pom.xml文件配置详解 --声明规范 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  9. hdu 4004 二分 2011大连赛区网络赛D

    题意:一个长为L的河,中间有n个石子,小青蛙需要跳少于m次过河,判断小青蛙每次跳跃最大距离的最小值 最大值最小,用二分 Sample Input 6 1 2 2 25 3 3 11 2 18 Samp ...

  10. 【HTML5】Canvas和SVG的区别

    * SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的.您可以为某个元素附加 JavaScript 事件处理器. 在 ...