我应该使用哪个Java FTP客户端库?

94

由于我在上次问题中没有得到积极的答复,我将尝试自己编写Java FTP上传applet。

我的问题是:“你能推荐一个Java FTP客户端库给我使用吗?”

我希望它具有以下特点:

  • 稳定
  • 能够处理被动和主动模式
  • 能够提供上传进度信息
  • 在出现问题时抛出可捕获的异常(尤其是在上传不成功时)
  • 便宜/免费使用,最好是开放源代码的

我发现了这个概述一些库,但由于这篇文章是从2003年的,也许已经有一些新的发展 :)

9个回答

57

查看Apache commons-net,其中包含FTP实用程序。我暂时不确定它是否符合您的所有要求,但肯定是免费的!


这段信息是与问题无关的,只是想把它放在这里。commons-net FtpClient在最新的2008年2.0版中仍然缺乏IPv6支持(RFC 2438)。但是据说2.1版本将包括它。他们不经常发布更新... - Moritz Both
2
@Moritz Both:这个问题最终在2010年得到了修复。请参见https://issues.apache.org/jira/browse/NET-288。 - sleske
我正在尝试使用建议的FTP库,但在网络代理后出现问题,有什么建议吗? - Ashish Sharma
2
这个库的速度相对较慢,正在寻找一个更快的库。 - Tommy Ng
@TommyNg 我通过从FTP服务器中删除配额并增加缓冲区大小来解决了减速问题。也许这可以帮到你。 - gouessej

17

5
缺点是它不在Maven中央仓库。 - yegor256
9
我不明白为什么不把库上传到Maven Central... 这是宗教或政治决定吗? - gavenkoa
2
@gavenkoa,据我所知,要将您的项目上传到Maven中央仓库,您几乎被迫使用Maven作为构建工具。如果您正在使用Ant(如ftp4j),那么这并不容易,我猜作者并不在意让这种情况发生。 - Paŭlo Ebermann
1
使用Maven存储库收集依赖项对于Java来说很常见(就像Python的pip,Ruby的Gems一样)。即使在Ant中也有Ivy。开发人员可能没有时间或金钱来进行上传工作,谁知道呢? - gavenkoa
@PaŭloEbermann 不,可以使用Ant作为构建工具并将库上传到Maven Central,这就是我们为JogAmp(JOGL,JOAL,JOCL)所做的。此外,您可以拥有自己的Maven存储库,而不是滥用集中化以尊重我完全理解的某些政治考虑。 - gouessej
显示剩余2条评论

6

6

是的,EnterpriseDT的edtFTPj非常稳定(首次发布于2000年),具备您可能需要的所有功能,并且也是开源的。

它被用于许多开源项目(以及许多商业项目),并被认为是最快的客户端库之一

正如另一位回答者所指出的,如果您确实希望升级到SFTP和/或FTPS,则可以通过简单的升级路径来完成,只需要进行很少的代码更改即可。


我无法让ftp4j工作,因为出现了一些非法回复异常。这个方案运行得相当不错。 - anujin
你提到的edtFTPj速度证明文章是2006年的,已经非常过时了。 - ftrujillo
2
这个软件包并不免费(而且价格昂贵),一旦你需要“专业版”功能,比如通过代理连接... - Eric Nicolas

4

当然是使用Commons-net。:) 大多数开源项目现在都在使用它。

yc


1

我已经成功地使用了Enterprise DT FTP库,它是免费且开源的。我无法与其他库(如Apache Commons Net库)进行比较,因为我没有使用过它们。虽然它提供了一个简单的升级路径到SFTP(通过SSH)和FTPS(通过SSL),但这是一个付费商业产品。


1

最近Apache commons-nets更新频率更高,而Enterprise DT库似乎更新得更加频繁。


0

你还可以查看2006年的文章,其中列出了不同的FTP客户端选项。

commons-net很好,但是FTP-GO可以为您提供一些更高级的功能。

kagi Ftp-Go


第一个链接已经失效。 - gouessej
1
@gouessej 第一个链接没有失效。第二个链接已经失效了。我已经恢复了“FTP-GO”链接。 - VonC
1
你说得对,谢谢。您需要支付750美元的费用才能获得此API的源代码 :s - gouessej

0
我正在下载视频文件。Apache的FTPClient出了点问题,虽然它下载速度相当快,但当我尝试播放视频时,视频中间会丢失一些块。而ftp4j则可以完整地下载整个视频,没有任何损失。
ftp4j赢了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接