用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 客户端程序>,其中需要特别注意的是主动模 ...
随机推荐
- 面向侧面的程序设计AOP-------《二》本质
本文转载自张逸:晴窗笔记 AOP技术本质 2.2.1 技术概览 AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Prog ...
- tcp粘包问题(封包)
tcp粘包分析 http://blog.csdn.net/zhangxinrun/article/details/6721495 解决TCP网络传输“粘包”问题(经典) http: ...
- canvas实践小实例一 —— 画板工具
前面讲了一部分的canvasAPI的基础知识,光看API的介绍确实是很无趣乏味,需要一点可以激发内心的激情的东西来激励自己来学习,于是就了伴随canvasAPI学习的小实例,这样通过API的知识,结合 ...
- ShortestPath:Wormholes(POJ 3259)
田里的虫洞 题目大意:就是这个农夫的田里有一些虫洞,田有很多个点,点与点之间会存在路,走过路需要时间,并且这些点存在虫洞,可以使农夫的时间退回到时间之前,问你农夫是否真的能回到时间之前? 读完题:这一 ...
- codeforces A. Group of Students 解题报告
题目链接:http://codeforces.com/problemset/problem/357/A 题目意思:将一堆人分成两组:beginners 和 intermediate coders .每 ...
- Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案
我用的Maven版本为最新版:3.3.9,但是我执行一个简单的clean命令会报如下错误: Exception in thread "main" java.lang.Unsuppo ...
- sublime text 3 使用过程总结记录
自定义的设置: "save_on_focus_lost": true //在文件失去焦点的时候自动保存
- Maven使用笔记(四)pom.xml配置详解
pom.xml文件配置详解 --声明规范 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- hdu 4004 二分 2011大连赛区网络赛D
题意:一个长为L的河,中间有n个石子,小青蛙需要跳少于m次过河,判断小青蛙每次跳跃最大距离的最小值 最大值最小,用二分 Sample Input 6 1 2 2 25 3 3 11 2 18 Samp ...
- 【HTML5】Canvas和SVG的区别
* SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的.您可以为某个元素附加 JavaScript 事件处理器. 在 ...