您的位置:首页 > 编程语言 > PHP开发

edtftp实现FTP开发

2016-06-17 19:06 1131 查看
用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()

 
fe39

当然,以上很多方法都有多中重载格式。下面给出一个简单封装的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: