用edtftpj实现Java FTP客户端工具

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/

时间: 2024-08-24 15:46:21

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

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

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

2、FTP客户端工具

1.应用场景:有了FTP服务器之后,通过FTP客户端工具就可以实现本机与服务器之间的文件传输了,当然,前提是必须先建立FTP服务器,否则只有FTP客户端是不行的 2.登录中关村在线官网http://www.zol.com.cn/,点击下载,8UFTP是一款特别简洁易用的FTP文件传输工具,输入8UFTP,回车进入下载页面,将8UFTP下载下来并安装完成 3.打开8UFTP,文件-站点管理器-新建站点,输入主机名也即是IP,服务器类型FTP,用户名也即是服务器登录用户Administrator,密

Java FTP客户端开源类库 edtFTPj

edtFTPj/Free是免费的流行的Java FTP库,全球公司依靠edtFTPj /Free 为它们的Java应用程序添加FTP客户端功能. (收费的支持SFTP.FTPS的edtFTPj/PRO 类库) 一些优点: 健壮和经过验证的FTP Java. 支持断点续传.主动和被动模式.二进制.ASCII. 开源,源代码包括在内. 可用于商业用途(LGPL许可). 可选择购买non-LGPL 许可证的产品,提供永久支持. 特性: FTP 支持所有标准和许多可选的FTP操作,支持非常多的FTP服务

基于ftp4j的FTP客户端工具

ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能.可以将ftp4j嵌到你的Java应用中,来传输文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建.删除.重命,移动远程目录和文件.ftp4j提供多种方式连接到远程FTP服务器包括:通过 TCP/IP直接连接,通过FTP代理.HTTP代理.SOCKS4/4a代理和SOCKS5代理连接,通过SSL安全连接. ftp4j该项目主页:http://www.sauronsoftware.it/projects/

FTP客户端工具

推荐使用8UFTP.小.快.好! 8UFTP工具分为8UFTP客户端工具和 8UFTP智能扩展服务端工具,涵盖其它FTP工具所有的功能.不占内存,体积小,多线程,支持在线解压缩.界面友好,操作简单,可以管理多个ftp站点,使用拖拉即可完成文件或文件夹的上传.下载. 智能升级检查,免费升级.建议同时安装8UFTP客户端和8UFTP智能扩展服务端工具. 8UFTP客户端工具:● 支持外链下载● 支持直接在线解压缩● 快速删除远程文件夹● 独家支持多线程上传,速度是普通ftp工具的3倍 

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

关于ftp上传文件其实并不难,但有时候面对现实的环境还是很蛋疼的,今天我就分享一下,普通的上传文件文件至FTP的方式,它满足大部分FTP,但也有特别的,下篇博客会提及到. 下面我用一个FtpUtil,来实现各种功能: 我们这里的主要功能是: 把本地文件夹下的文件上传到ftp的一个文件夹下 ,如果上传成功,就把上传成功的文件备份到另一个文件夹下,如果备份成功,就可以拿备份成功的文件删除了. 直接上代码了! package cn.tendency.utils; import java.io.File

FTP客户端配置2

ftp上传文件测试命令: 2.2使用浏览器测试 打开浏览器,在地址栏中输入ftp服务器的ip地址,例如:ftp ://192.168.22.7:12721,浏览器会弹出一个“登录身份”对话框,在对话框中输入用户名和密码,将会打开该用户在ftp服务器上的目录 2.3通过客户端工具访问 linux环境的ftp客户端工具中,gFTP是比较常用的一个,安装好后在主机.端口.用户名.密码处输入相应的内容,点击连接服务器. FTP客户端配置2

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

package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 自动扫描FTP文件工具类 * 需要定时执行 */ public class S

网络客户端工具—ftp、lftp、wget

ftp命令 系统默认没有安装ftp命令的软件包 [[email protected] ~]# yum -y install ftp  ... Running Transaction   Installing : ftp-0.17-54.el6.x86_64                                                                                1/1    Verifying  : ftp-0.17-54.el6.x86_64