用edtftpj实现Java FTP客户端工具

简介:
一、开发指南
 
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)、设置远程主机和用户认证
 
 
3)、登录到服务器
  ftp.connect();
 
4)、关闭连接
 
 
3、设置更多的连接属性
 
1)、设置自动登录
 
2)、设置传输缓冲区
 
3)、设置获取服务器端信息时所使用的编码
 
4)、设置传输通知的时间间隔
5)、其他的一些设置
 
4、改变当前的工作目录
1)、获取当前的ftp工作目录
 string directory =  ftp.getRemoteDirectory();
2)、改变当前的工作目录
3)、改变当前的工作目录为其父目录
 
5、上传与下载、暂停
1)、上传
  ftp.uploadFile(java.lang.String localFileName, java.lang.String remoteFileName)
2)、下载
  ftp.downloadFile(java.lang.String localFileName, java.lang.String remoteFileName)
3)、暂停所有的传输
 
当然,以上很多方法都有多中重载格式。下面给出一个简单封装的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
 
 
以上代码上传支持文件夹操作。

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/101108,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 安全 Shell
⭐⭐【Shell 命令集合 文件传输 】Linux ftp工具 使用指南
⭐⭐【Shell 命令集合 文件传输 】Linux ftp工具 使用指南
42 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 文件传输 FTP客户端工具】Linux ncftp 命令使用指南
【Shell 命令集合 文件传输 FTP客户端工具】Linux ncftp 命令使用指南
36 0
|
2月前
|
数据采集 编解码 Java
解锁Hutool魔法箱:Java开发者不可错过的神奇工具集
解锁Hutool魔法箱:Java开发者不可错过的神奇工具集
61 0
|
1月前
|
JSON NoSQL Java
【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)
【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)
44 0
|
1月前
|
Java
java中日期处理的一些工具方法
java中日期处理的一些工具方法
17 1
|
3天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
21 11
|
1月前
|
安全 Java 数据安全/隐私保护
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
|
1月前
|
安全 Java 数据安全/隐私保护
探讨 Java 代码混淆加固工具
探讨 Java 代码混淆加固工具
|
1月前
|
存储 安全 Java
基于Java的qq截图工具(毕业设计含源码)
基于Java的qq截图工具(毕业设计含源码)
28 0