Java FTP客户端类库
摘要: 本文介绍了在JAVA中如何使用java现有的可用的库来编写FTP客户端代码。文章比较了一系列详尽的FTP库,从正反两面介绍了每个库,帮助决策者根据自己的需要选择其中最合适的一个。另外,本文解释了当一个库被替换时,fagade 样式如何帮助改变对其的管理。最后作者Jean-Pierre Norguet讨论并提出了一些由于缺乏权威规范而引起的问题。(2003/4/4)
让我们设想这样一个情形--我们想写一个纯Java的从一个远程计算机上运行的FTP服务器上下载文件的应用程序;我们还希望能够过滤那些供下载的远程文件的基本文件信息如文件名、数据或者文件大小。
尽管从头开始写一个FTP协议处理程序是可能的,并且也许很有趣,但这项工作也是困难、漫长并且存在着潜在的危险。因为我们不愿意亲自花时间、精力、或者金钱去写这样的一个处理程序,所以我们转而采用那些已经存在的可重用的组件。并且很多的库存在于万维网(WWW)上。使用FTP客户端库,
一个下载文件的程序可以用Java简单地写成这样:
FTPClient ftpClient = new FTPClient();
ftpClient.connect("ftp.foo.com", "user01", "pass1234");
ftpClient.download("C://Temp//", "README.txt");
// Eventually other operations here ...
ftpClient.disconnect();
找一个优秀的适合我们需要的java FTP 客户端库并不像看起来那么简单。相反这是一项非常痛苦复杂的工作。首先找到一个FTP客户端库需要一些时间,其次,在我们找到所有的存在的库后,我们该选哪一个呢?每个库都适合不同的需求。这些库在性能上是不等价的,并且它们的设计上有着根本上的差别。每个类库都各具特点并使用不同的术语来描述它们。因而,评价和比较FTP客户端库是一件困难的事情。
使用可重用组件是一种值得提倡的方法,但是在这种情况下,刚开始往往是令人气馁的。后来或许有点惭愧:在选择了一个好的FTP库后,其后的工作就非常简单了,按简单的规则来就行了。
本文的目的是使选择的过程更简短、容易、有价值。首先我列举了所有的可用的FTP客户端库,然后定义并描述了一系列的FTP客户端库应该在某方面提出的相关标准。最后,我会描述一下这些库的性能等彼此比较的结果。所有的这些都为我们做一个快速的,可靠的,长期的决定提供了所需的东西。
FTP 的JDK支持
注释959(RFC959)需要FTP的参考规范,SUN微系统在JDK中提供了一个RFC959接口,但是它是内在的、没有正式文档记载的、并且没有提高任何源代码。尽管RFC959目前还没有清楚的说明,它实际上是RFC1738的一个公共接口的实现的后续--URL规范,如图1所示
库的比较: 下面的列表简单的概述了我在本文中比较的库。它们都遵循FTP参考规范,下面我将列举提供者名字和库的名称(斜体字表示的部分),资源中包含了到每个产品的站点的链接。为了启动对库的使用,我还在本文中论及了主要的FTP客户端类。1. JScape, iNet Factory: com.jscape.inet.ftp.Ftp 2. /n software, IP*Works: ipworks.Ftp 3. Enterprise Distributed Technologies, Java FTP Client Library: com.enterprisedt.net.ftp.FTPClient 4. IBM alphaWorks, FTP Bean Suite: com.ibm.network.ftp.protocol.FTPProtocol 5. SourceForge, JFtp: net.sf.jftp.net.FtpConnection 6. The Jakarta Project, Jakarta Commons/Net: org.apache.commons.net.ftp.FTPClient 7. JavaShop JNetBeans: jshop.jnet.FTPClient 8. Sun, JDK: sun.net.ftp.FtpClient 9. Florent Cueto, JavaFTP API: com.cqs.ftp.FTP 10.Bea Petrovicova, jFTP: cz.dhl.ftp.Ftp 11.The Globus Project, Java CoG Kit: org.globus.io.ftp.FTPClient 注: 1.在我写本文的同时,IBM正在评估将它的alphaWorks FTP Bean Suite 发布到网上是否合适。但是目前已经取消了所有的用户下载权限。 2.Jakarta Commons/Net 是Savarese NetComponents(不再发展)的一个临时性替代。 3.JavaShop JNetBeans似乎被抛弃了,在我写本文的同时,其网站已经有一个多月没有开了,我也从没收到任何对我的请求支持的回讯