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. 【SpringMVC】SpringMVC系列3之@PathVariable映射URL占位符参数

    3.@PathVariable映射URL占位符参数 3.1.概述 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义. ...

  2. jstack命令详解

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  3. MySQL数据库索引的4大类型以及相关的索引创建

    以下的文章主要介绍的是MySQL数据库索引类型,其中包括普通索引,唯一索引,主键索引与主键索引,以及对这些索引的实际应用或是创建有一个详细介绍,以下就是文章的主要内容描述. (1)普通索引 这是最基本 ...

  4. MVC3和MVC4相关问题

    从TFS获取的MVC项目生成一直提示这个错误,我的VS中MVC3和MVC4都有,TFS项目中的MVC版本应该是MVC3的,现在我要用这个项目,但是一直是这个错误,请高手指点,积分不多了,见谅 程序集“ ...

  5. jQuery获取Select选择的Text和 Value(转)

    radio: radio: var item = $('input[name=items][checked]').val(); var item = $('input[name=items]:chec ...

  6. 1.1 让CPU占用率曲线听你指挥[cpu manager]

    [本文链接] http://www.cnblogs.com/hellogiser/p/cpu-manager.html [题目] 写一个程序,让用户来决定Windows任务管理器(Task Manag ...

  7. Linux系统排查3——I/O篇

    当磁盘无法写入的时候,一般有以下可能: 文件系统只读 磁盘已满 I节点使用完 一. 遇到只读的文件系统 文件系统自动设置成只读可能是系统自我保护的一种机制,因此需要实现弄清究竟是什么原因造成了文件系统 ...

  8. ffplay 2.5.3 媒体播放器

    下载地址 http://pan.baidu.com/s/1bnlMYB1 一定要解压到 D:\ffmpeg\ 目录下 双击 OpenWith_FFPlay.reg 注册ffplay 在视频文件名上面, ...

  9. DroidDraw - Android的界面设计工具

    ADT中的界面开发工具实在是很烂,通常情况下都需要硬编码,对于程序员来说不但效率比较低下,而且调试起来极其不方便,还好在Google未推出GUI的"所见即所得"的工具之前,我们找到 ...

  10. codeforces A. Candy Bags 解题报告

    题目链接:http://codeforces.com/contest/334/problem/A 题意:有n个人,将1-n袋(第 i  袋共有 i  颗糖果,1<= i  <=n)所有的糖 ...