| |
Java FTP客户端库的选择 |
|
时间: 2006-06-20 来自:blog |
 |
|
时间标签检索
在许多情况下,我们对一个远程文件的最近的修改的时间标签感兴趣。不幸的是,没有RFC介绍检索该信息的一个标准FTP命令。下面有两个实用的方法:
1.
通过捕捉服务器回答从LIST响应中检索该信息。但是,正像你在前面部分学到的一样,LIST响应在FTP服务器中各不相同,并且时间标签信息有时还不完整。使用Unix格式,当远程文件存在一年以上时会存在不精确性:只有日期和年份,没有小时或者分钟部分。
2.
使用非标准的MDTM命令。该命令专门检索一个远程文件的最新修改的时间标签。可惜,不是所有的FTP服务器都执行这个命令。 MDTM命令的一个复杂的备选项支持就是发送一条原始的MDTM命令并且捕捉命令。多数库提供发送一条原始的FTP命令的一个方法,像:
String
timeStampString = ftpClient.command("MDTM
README.txt");
另一个可能的方面就是FTP服务启用GMT(格林威治标准时间)返回时间信息。如果已知服务器时区与FTP通讯分离的话,那么java.util.TimeZone.getOffset()函数能帮助调整时区之间的差别。进一步了解该函数的信息请查看JDK文档。
"遗留问题解答"部分进一步讨论文件时间标签检索。
防火墙
典型的,防火墙设置在一个私人的企业网络和公共网络,如因特网,之间。它可管理从私人网络到公共网络的访问,但是从公共网络到私人网络的访问被否决。
Socks是一个作为因特网防火墙网关使用而开发的公共的、合用的协议。JDK支持Socks
4 和 Socks 5代理。他们由库中的某些部分控制。作为备选项,JVM命令行可设置Socks 代理参数:java -DsocksProxyPort=1080
-DsocksProxyHost=socks.foo.com -Djava.net.socks.username=user01
-Djava.net.socks.password=pass1234 ...
另一个通用的Socks 代理支持备选项是"Socks
化"客户端设备在下面的TCP/IP层。
JDK也支持HTTP通道,这些广泛使用的代理不允许FTP上传。/n软件的IP*Works允许你设置HTTP通道参数。
多数库既支持活跃的、也支持被动的连接:当客户端在接受引入的连接到更高的端口的防火墙后面时,被动连接有用。RFC1579更详细的讨论了这个友好的防火墙功能性。一些产品的文件把活跃和被动的链接分别看作PORT
和
PASV命令。
并行传送
在一个桌面应用程序中,当在主单线程中的传送启动时,一切事情都冻结了。一些库自动的服务于在单独的线上并行传送的事件循环,因此我们不必创建和管理我们自己的线程。
JavaBean说明书支持
一些库实现JavaBean说明书。JavaBean默认允许可视的编程,它在主要的Java
IDE中特征化。
/n软件的IP*Works、JavaBean设计是基于事件的(例如:ipworks.Ftp.listDirectory()函数)。尽管它保持同步并且相当安全,一些程序员还是发现它在服务器端的应用程序显得多余或者笨拙。
进程监督
一些库执行进程监督。进程监督支持使得执行追踪任何FTP传送的进程的事件监听器更为容易。
当开发一个友好的用户界面时,这个特征会有用。
传输类型
RFC959
3.1.1部分定义了几种传输类型,其中两个是常见的ASCII nonprint (默认) 和image (也称
binary)。有些库可根据文件扩展用自动模式设置,这样一种方法在现代信息系统很少有用,另一种传输类型已经废弃了并且不被任何一种Java支持。
其他标准说明
所有的库至少要在JDK
1.2.x或者更新的版本上运行;多数应该在JDK 1.1.x上运行,甚至是JDK
1.0.x。
所有库是纯Java语言的。
比较矩阵列出了其他明显的标准。
Java
FTP客户端库:比较矩阵
现在出现的是最后的比较矩阵。它在左边列的是标准,顶上列的是库,它列出了与左边标准对应的在上面的库。在单元中,Y表示"是";其他缩写在上面的标准列表(用粗体字标出的字母)和表格的密码中解释过。
当选择一个库时,我有几条建议:
·服务器端应用程序,我推荐Jakarta
Commons/Net 库
·JScape's
iNetFactory我发现是最容易使用的库
·/n软件的IP*Works是广泛使用的包含FTP加密支持的产品中的一部分。
·Java
CoG Kit也执行GridFTP。GridFTP是一个有趣的新一代文件传送系统。
在写本文时,我建议不使用当前条件下的IBM的
alphaWorks FTP Bean Suite和JavaShop的
JnetBeans。
其它库绝对得体并且适合你的需要;请参考矩阵。
|
|
|
|
|
|
|
|