文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页网络冲浪网络技术 → Java FTP客户端类库比较

Java FTP客户端类库比较

时间:2005/12/12 20:10:00来源:本站整理作者:不详我要评论(0)

摘要:
本文介绍了在JAVA中如何使用java现有的可用的库来编写FTP客户端代码。文章比较了一系列详尽的FTP库,从正反两面介绍了每个库,帮助决策者根据自己的需要选择其中最合适的一个。另外,本文解释了当一个库被替换时,fagade 样式如何帮助改变对其的管理。最后作者Jean-Pierre Norguet讨论并提出了一些由于缺乏权威规范而引起的问题.

 

让我们设想这样一个情形--我们想写一个纯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客户端库应该在某方面提出的相关标准。最后,我会描述一下这些库的性能等彼此比较的结果。所有的这些都为我们做一个快速的,可靠的,て诘木龆ㄌ峁┝怂璧亩鳌?BR> 
FTP 的JDK支持
注释959(RFC959)需要FTP的参考规范,SUN微系统在JDK中提供了一个RFC959接口,但是它是内在的、没有正式文档记载的、并且没有提高任何源代码。尽管RFC959目前还没有清楚的说明,它实际上是RFC1738的一个公共接口的实现的后续--URL规范,如图1所示

 

 

 

screen.width-430)this.width=screen.width-430" align="center" border="0" dypop="按此在新窗口浏览图片" _src="http://www.yzcc.com/Files/RoUpFiles/ftp1-thumb.gif">

 

一个RFC1738实现在JDK中是作为标准被提供的,它为FTP传输操作完成合适的工作。它是公开的,并有正式文档说明,而且应该提供源代码。我们写出如下语句来使用这个实现:
   
   URL url = new  URL(<A href=&quotftp://user01:pass1234@ftp.foo.com/README.txt&quot; target=_blank><A href=&quotftp://user01:pass1234@ftp.foo.com/README.txt;type=i"><FONT color=#0000ff&gtftp://user01:pass1234@ftp.foo.com/README.txt&lt;/FONT>;type=i);   
   URLConnection urlc = url.openConnection();
 InputStream is = urlc.getInputStream(); // 下载
   OutputStream os = urlc.getOutputStream(); // 上传

FTP客户端的JDK支持严格的遵循标准建议,但是它具有一些缺点:
    首先,它和第三方FTP类库有着根本的区别,RFC959实现优于RFC1738的;
    第二,大多数台式机的FTP客户端工具中都是基于RFC959实现的,很多的JAVA程序使用这些工具来连接到FTP服务器。由于喜好的原因,这些工具大部分需要采用基于RFC959的库。
    第三,URL和URLConnection类只是为通讯打开流。SUN的库没有为将原始的FTP服务器的回应信息组织构成更多可用的Java的对象如String, File, RemoteFile, 或 Calendar这些提供任何直接的支持。因此我们必须写更多的代码来将数据写入文件或者生成一个目录表。
    第四,正如RFC1738中的3.2.5节所说明的,“最优化”,FTP URLs要求在每次操作后都要将连接控制关闭。当传输很多小的文件的时候,这是相当不经济的,而且效率相当低。而且,强限制的FTP服务器可能判断这是一个恶意的网络攻击或滥用高层通讯,进而会禁止其进一步的访问。
    最后,它缺乏一些有用的特征。

由于上述的原因,使用一个第三者库是更优越的。下面的就列举出了一些可用的第三者代替方案:
库的比较:

下面的列表简单的概述了我在本文中比较的库。它们都遵循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似乎被抛弃了,在我写本文的同时,其网站已经有一个多月没有开了,我也从没收到任何对我的请求支持的回讯。

相关视频

    没有数据

相关阅读 jdk不是有效的win32程序怎么办 jdk不是有效的win32程序解决方法java设置cookie教程 java怎么设置cookiejava怎么设置随机数 java设置随机数详细教程java怎么设置光标位置 java设置光标位置教程如何在Mac上清除Java高速缓存?如何在Mac上卸载Java?Mac上怎么卸载Java?OSX 10.11 java 6不兼容问题解决办法如何为Mac更新Java?java mac版更新教程

文章评论
发表评论

热门文章 小米路由器设置教程附共享有线路由后再接无TP-link无线路由器设置D-Link DI-524M路由器

最新文章 百度网盘解除黑名单摆百度不收录怎么办 百度 10款免费开源图表插件推荐ssid隐藏了怎么办?隐藏SSID的无线网络如何OneDNS设置教程两块网卡访问不同网络案例分享

人气排行 宽带连接图标不见了怎么办 宽带连接图标怎么dell 服务器开机总是提示按F1才能进系统解决dns是什么?dns怎么设置?buffalo无线路由器设置图文教程哪种WIFI无线各种加密方式更安全?ADSL宽带连接错误(720)及解决方法双网卡同时上内外网设置教程公司网络综合布线图解