用edtftpj实现Java FTP客户端工具
edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活。edtftpj有多种版本,分别是java、.net和js版本。对于Java版的有一个免费版本。我用的就是免费版本。其余的均为商业版本。
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客户端工具的更多相关文章
- FTP 客户端工具(支持 Windows/Unix/Linux)
FTP 客户端工具,支持 Windows/Unix/Linux
- Java FTP客户端开源类库 edtFTPj
edtFTPj/Free是免费的流行的Java FTP库,全球公司依靠edtFTPj /Free 为它们的Java应用程序添加FTP客户端功能. (收费的支持SFTP.FTPS的edtFTPj/PRO ...
- FTP客户端工具
推荐使用8UFTP.小.快.好! 8UFTP工具分为8UFTP客户端工具和 8UFTP智能扩展服务端工具,涵盖其它FTP工具所有的功能.不占内存,体积小,多线程,支持在线解压缩.界面友好,操作简单,可 ...
- 普通的java Ftp客户端的文件上传
关于ftp上传文件其实并不难,但有时候面对现实的环境还是很蛋疼的,今天我就分享一下,普通的上传文件文件至FTP的方式,它满足大部分FTP,但也有特别的,下篇博客会提及到. 下面我用一个FtpUtil, ...
- 自动扫描FTP文件工具类 ScanFtp.java
package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- Java客户端工具选择:HTML?Swing?XML?
整理下面的文章是因为个人觉得写的很好,关于java的客户端了解也并不是太多.看了下面的文章觉得很有必要贴出来,方便自己以后了解java客户端编程. Java软件设计师和管理人员经常会面临这样的难题:在 ...
- ftp、sftp、vsftp、vsftpd、lftp以及一些网络客户端工具命令
ftp 是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.了解更多ftp lftp :是一个 ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- Java FTP 基本操作
最近工作中用到了 FTP 相关的操作,所以借此机会了解了下具体内容. FTP基础 关于 FTP 基础推荐阅读<使用 Socket 通信实现 FTP 客户端程序>,其中需要特别注意的是主动模 ...
随机推荐
- 要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。
1.在网站根目录下新建一scripts文件夹,向里边添加jquery-1.7.2.min.js和jquery-1.7.2.js(可根据自己需要使用不同的版本), 2.在根目录下添加全局应用程 ...
- (原创)Python文件与文件系统系列(4)——文件描述字操作
文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Py ...
- 安装tar.bz2文件
(1) 解包 – tar jxvf softname-10.0.1.tar.gz -C /usr/src/(-C指的是把文件解压到后面的路径下,此处可以不选) – cd /usr/src/softna ...
- MFC 颜色选择对话框、颜色按钮
COLORREF color=RGB(0,255,0); unsigned char r=GetRValue(color); unsigned char g=GetGValue(color); uns ...
- 虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
from:http://blog.csdn.net/fisher_jiang/article/details/2477577 一. 虚析构函数 我们知道,为了能够正确的调用对象的析构函数,一般要求具有 ...
- Android之Bundle类
API文档说明 1.介绍 用于不同Activity之间的数据传递 1.重要方法 clear():清除此Bundle映射中的所有保存的数据. clone():克隆当前Bundle containsKey ...
- WPF常用方法,事件驱动和控件遍历
//初始化数据,默认选中第一项,事件驱动 RadioButton btn = FuncClass.GetChildObject<RadioButton>(this.stackPanel1, ...
- Start GitHub
google 的各种被墙大家都懂的,所以转向GitHub 的怀抱. 以前其实也关注过,这回是下决心好好试用了. Fork repositories Forking creates a new, uni ...
- Java hour5
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为4 Hour,请各位不吝赐教. Hour5 神一样 ...
- jquery日期格式化
function dateFormat(date, format){ date = , ) / ), ) { v = ); } ...