`
jacally
  • 浏览: 770086 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Commons-net包实现ftp服务器的访问

    博客分类:
  • JAVA
阅读更多

项目需要实现从某银行的ftp服务器上定时下载数据文件的模块.于是使用apache的commons-net包实现ftp服务器的链接

中间使用了commons的io和Oro包.Io包封装了一些使用的方法,eg:安全的关闭各种流.根据文件的长度得到文件的方便识别的大小(k,m.g).还有一些其它使用的方法,读者可以下载后自行研究..

commons-net包封装了一些常见的网络包:ftp,smtp,pop3等..本文使用了ftp包的功能. 代码如下:


 

java 代码
 
  1. package org.uranus.tools.net.ftp;  
  2.   
  3. import java.io.InputStream;  
  4. import java.util.Properties;  
  5.   
  6. import org.apache.commons.net.ftp.FTPClient;  
  7. import org.apache.commons.net.ftp.FTPClientConfig;  
  8. import org.apache.commons.net.ftp.FTPReply;  
  9. import org.uranus.util.StringUtils;  
  10.   
  11. /** 
  12. * 基于apache组织的commonNet开源组件实现ftp客户端<br> 
  13. * 本程序运行依赖于一个config成员变量属性,其是一个属性(Properties)对象<br> 
  14. * 系统要求这个config对象,必需有如下属性key:<br> 
  15. * server(ftp服务器ip地址或域名)<br> 
  16. * username(登录用户名)<br> 
  17. * password(登录密码)<br> 
  18. * 如下属性key是可选的:<br> 
  19. * systemKey(ftp服务器的操作系统key,如window)<br> 
  20. * serverLanguageCode(ftp服务器使用的语言,如zh)<br> 
  21. * <br> 
  22. * 本程序是线程安全,在每一个上传时都将创建ftp连接,上传结束后再关闭ftp连接<br> 
  23. * 
  24. * 例子:<br> 
  25. * InputStream localIn = new FileInputStream("c:\\计算机.txt");<br> 
  26. * 
  27. * java.util.Properties config = new Properties();<br> 
  28. * config.setProperty("server", "192.168.5.120");<br> 
  29. * config.setProperty("username", "upload");<br> 
  30. * config.setProperty("password", "upload");<br> 
  31. * 
  32. * FtpClientCommonNetImpl client = new FtpClientCommonNetImpl();<br> 
  33. * client.setConfig(config);<br> 
  34. * client.upload(localIn, "/aaa/计算机.txt", true);<br> 
  35. * 
  36. * 
  37. * @author zhangdb 
  38. * 
  39. */  
  40. public class FtpClientCommonNetImpl implements IFtpClient {  
  41. // ftp配置  
  42. private Properties config;  
  43.   
  44. /** 
  45. * 连接到ftp服务器 
  46. * 
  47. * @param server 
  48. * @param userName 
  49. * @param password 
  50. * @return 
  51. * @throws FtpException 
  52. */  
  53. protected FTPClient connectFtpServer(String server, String userName,  
  54. String password) throws FtpException {  
  55. // 创建ftp客户端对象  
  56. FTPClient ftp = new FTPClient();  
  57. try {  
  58. ftp.configure(this.getFTPClientConfig());  
  59. // 连接ftp服务器  
  60. ftp.connect(server);  
  61. // 登录  
  62. ftp.login(userName, password);  
  63.   
  64. // 返回值  
  65. int reply = ftp.getReplyCode();  
  66. if ((!FTPReply.isPositiveCompletion(reply))) {  
  67. ftp.disconnect();  
  68. throw new FtpException("登录ftp服务器失败,请检查server[" + server  
  69. "]、username[" + userName + "]、password[" + password  
  70. "]是否正确!");  
  71. }  
  72.   
  73. return ftp;  
  74. catch (Exception ex) {  
  75. throw new FtpException(ex);  
  76. }  
  77. }  
  78.   
  79. /** 
  80. * 关闭连接 
  81. * 
  82. * @param ftp 
  83. */  
  84. protected void disconnectFtpServer(FTPClient ftp) {  
  85. try {  
  86. ftp.logout();  
  87. ftp.disconnect();  
  88. catch (Exception ex) {  
  89. throw new FtpException(ex);  
  90. }  
  91. }  
  92.   
  93. /** 
  94. * 上传 
  95. */  
  96. public void upload(InputStream localIn, String remoteFilePath)  
  97. throws FtpException {  
  98. String server = this.config.getProperty("server");  
  99. String userName = this.config.getProperty("username");  
  100. String password = this.config.getProperty("password");  
  101. FTPClient ftp = this.connectFtpServer(server, userName, password);  
  102.   
  103. try {  
  104. boolean result = ftp.storeFile(this  
  105. .enCodingRemoteFilePath(remoteFilePath), localIn);  
  106. if (!result) {  
  107. throw new FtpException("文件上传失败!");  
  108. }  
  109. catch (Exception ex) {  
  110. throw new FtpException(ex);  
  111. finally {  
  112. this.disconnectFtpServer(ftp);  
  113. }  
  114. }  
  115.   
  116. /** 
  117. * 上传结束以后关闭输入流 
  118. * 
  119. * @param localIn 
  120. * @param remoteFilePath 
  121. * @param afterUploadCloseInputStream 
  122. * @throws FtpException 
  123. */  
  124. public void upload(InputStream localIn, String remoteFilePath,  
  125. boolean afterUploadCloseInputStream) throws FtpException {  
  126. try {  
  127. // 上传  
  128. this.upload(localIn, remoteFilePath);  
  129. finally {  
  130. if (afterUploadCloseInputStream) {  
  131. if (localIn != null) {  
  132. try {  
  133. localIn.close();  
  134. catch (Exception ex) {  
  135. throw new FtpException(ex);  
  136. }  
  137. }  
  138. }  
  139. }  
  140. }  
  141.   
  142. /** 
  143. * 得到配置 
  144. * 
  145. * @return 
  146. */  
  147. protected FTPClientConfig getFTPClientConfig() {  
  148. // 创建配置对象  
  149. FTPClientConfig conf = new FTPClientConfig(this.config.getProperty(  
  150. "systemKey", FTPClientConfig.SYST_NT));  
  151. conf.setServerLanguageCode(this.config.getProperty(  
  152. "serverLanguageCode""zh"));  
  153. return conf;  
  154. }  
  155.   
  156. /** 
  157. * 远程文件路径编码(上传到ftp上的文件路径) 
  158. * 
  159. * @param remoteFilePath 
  160. * @return 
  161. */  
  162. protected String enCodingRemoteFilePath(String remoteFilePath) {  
  163. return StringUtils.gbkToIso8859EnCoding(remoteFilePath);  
  164. }  
  165.   
  166. public Properties getConfig() {  
  167. return config;  
  168. }  
  169.   
  170. public void setConfig(Properties config) {  
  171. this.config = config;  
  172. }  
  173.   
  174. }   

分享到:
评论

相关推荐

    commons-net-3.1.jar,3.3,3.6版本

    这个库在不同的版本中提供了各种功能的增强和优化,比如`commons-net-3.1.jar`, `commons-net-3.3.jar`, 和 `commons-net-3.6.jar`。下面将详细阐述这些版本中涉及的主要知识点: 1. **FTP(文件传输协议)支持**:...

    commons-io-1.4.jar等

    JAVA连接FTP服务器,并上传/下载文件的,使用commons-net包实现ftp服务器的访问,commons-net包封装了一些常见的网络包:ftp,smtp,pop3等..相关包:commons-net-1.4.1.jar ; commons-io-1.4.jar;jakarta-oro-2.0.8.jar

    commons-net-3.3源码包

    在这个"commons-net-3.3源码包"中,我们可以深入理解其实现细节,对其进行定制和扩展,这对于开发人员来说非常有用。下面我们将详细探讨此源码包中的关键知识点。 1. **FTP协议实现**: Commons Net库的核心功能之...

    java commons-net 类库

    无论是在构建FTP服务器客户端、实现网络诊断工具,还是处理其他网络通信需求,Java Commons-Net都是一个强大且可靠的工具。通过阅读提供的`commons-net-3.3.jar`文件,开发者可以直接将该库导入项目中,开始利用其...

    commons-net

    在FTP方面,commons-net提供了`FTPClient`类,这是一个功能强大的类,可以用于连接FTP服务器,执行上传、下载、删除文件,创建或删除目录等操作。例如,你可以使用`connect()`方法建立连接,`login()`方法进行身份...

    ftp所需jar包(commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar)

    在这个场景中,我们关注的是两个特定的Java库文件:`commons-net-1.4.1.jar` 和 `jakarta-oro-2.0.8.jar`,它们是实现FTP功能的关键组件。 `commons-net-1.4.1.jar` 是Apache Commons Net库的一个版本,这是一个...

    com.jcraft.jschjar和commons-net

    总结来说,"com.jcraft.jsch.jar"和"commons-net"是Java开发中处理网络通信特别是SSH和FTP任务的重要工具,而.NET平台也有类似的功能实现,为不同平台的开发者提供了丰富的网络通信解决方案。了解并熟练运用这些库,...

    commons-net-3.2

    通过使用FTPClient类,开发者可以方便地与FTP服务器进行交互,实现文件的高效传输。此外,FTPFile类则用于表示FTP服务器上的文件和目录信息,提供了丰富的属性和方法来获取文件的详细信息。 SMTP(简单邮件传输协议...

    aduna-commons-net-2.1.jar.zip

    这个库,以"aduna-commons-net-2.1.jar.zip"的形式提供,包含了丰富的网络编程接口和实现,为开发者提供了强大的网络操作支持。 Aduna Commons Net是Apache软件基金会的一个项目,其核心目标是为Java开发者提供一组...

    commons-logging-1.2.jar commons-vfs-2.2.jar

    使用Apache Commons VFS的SFTP模块,开发者可以轻松地在代码中实现对远程SFTP服务器的文件操作,例如上传、下载、列出目录内容、重命名或删除文件等,而无需关心具体的文件系统细节。Apache Commons Logging则负责...

    commons-net-3.3

    在使用`commons-net-3.3.jar`时,确保将其添加到项目的类路径或依赖管理中。如果你使用的是Maven或Gradle,可以将Apache Commons Net作为依赖添加到构建文件中,以便自动下载和管理库。 总的来说,Apache Commons ...

    commons-net-1.4.1.jar

    这个库的核心版本是`commons-net-1.4.1.jar`,它包含了丰富的类和方法,使得开发者能够方便地实现各种网络功能。 在`commons-net-1.4.1.jar`中,我们可以找到许多关键组件,包括: 1. **FTP(文件传输协议)**: 这...

    commons-vfs-1.0-src

    `FileSystem`表示一个具体的文件系统,如本地文件系统或FTP服务器;`FileSystemManager`则是管理这些文件系统的工厂类,负责创建和配置文件系统。 2. **协议支持**:VFS的设计允许扩展以支持多种协议,如`file:`、`...

    commons-net源码包

    1. **FTP协议实现**:Apache Commons Net包含了一个完整的FTP客户端库,支持主动和被动模式,断点续传,FTP上传和下载,以及FTP服务器的命令交互。源码中`org.apache.commons.net.ftp`包下的类,如`FTP`、`FTPClient...

    commons-net-3.4-src.zip

    接着,`TelnetClient`类实现了Telnet协议,用于远程终端访问。源码中,它处理了诸如IAC(Inter-Active Command)这样的特殊字符,以实现不同终端环境下的字符编码和控制序列的处理。`TelnetOptionHandler`接口和相关...

    ant-commons-net-1.7.0.jar.zip

    `ant.license.txt`文件通常包含Apache软件基金会项目的许可证信息,它详细说明了如何使用、修改和分发`ant-commons-net-1.7.0.jar`的条款。Apache Commons Net遵循Apache License Version 2.0,这是一个非常宽松的...

    aduna-commons-net-2.2.jar.zip

    例如,一个需要从FTP服务器下载大量文件的应用,可以通过Aduna Commons Net的FTP客户端轻松实现;又如,一个需要监控网络状态并找出开放端口的系统,可以利用其端口扫描功能。 总之,"aduna-commons-...

    apache-commons-net-3.0.1-src

    "apache-commons-net-3.0.1-src"是一个源代码版本,允许开发者深入理解其内部工作原理,并根据需要进行定制或扩展。 FTP(File Transfer Protocol)是互联网上最常用的文件传输协议之一,Apache Commons Net提供了...

    commons-net压缩包

    通过`FTPClient`类,开发者可以方便地实现FTP交互,而`FTPFile`类则代表FTP服务器上的文件或目录信息。 **Telnet协议支持**: 对于需要与远程服务器进行Telnet通信的应用,Apache Commons Net提供了`TelnetClient`...

    ant-commons-net-1.6.2.jar.zip

    在Ant中,这个库被用来处理与网络相关的任务,例如上传或下载文件到FTP服务器,发送电子邮件,或者访问其他网络服务。 "ant-commons-net-1.6.2.jar"是这个库的特定版本,版本号1.6.2。这个JAR文件包含了所有必要的...

Global site tag (gtag.js) - Google Analytics