使用JDK 1.7获取sun.net.ftp.FtpClient的错误

时间:2013-12-20 08:35:23

标签: ftp java-7 ftp-client sun

我开发了一个项目,使用sun.net.ftp.FtpClient类从我使用JDK 1.5的ftp服务器下载文件。 现在我已切换到JDK 1.7,我收到以下错误。

java: sun.net.ftp.FtpClient is abstract; cannot be instantiated

它跟我联系JDK 1.7不支持 FtpClient

欢迎任何解决此问题的建议?

3 个答案:

答案 0 :(得分:5)

你不应该使用sun.*中的类 - 不能保证它们在java版本之间保持兼容。

我建议改写使用类似Apache Commons FTP的内容。它应该非常简单易用,所以应该是一件容易的事。

答案 1 :(得分:3)

尽管有{01}}中的类应该避免使用,但除了提出替代方案外,答案并没有恰当地解决错误。

我在您尝试实例化sun.*的上下文中没有范围 - 但仍有可能这样做。

该类是抽象的,因此您无法实例化它。 (见§8.1.1.1

尽管如此,一切都没有丢失。 要获取sun.net.ftp.FtpClient的实例,您可以使用SDK中的FtpClient中的静态方法来执行此操作,如下例所示:

sun.net.ftp.FtpClientProvider

还有一些工作涉及,但它允许你避免添加一个你不需要的大量类的新库 - 这取决于你想做什么。

答案 2 :(得分:3)

自1.7以来有一些变化。 如:

 * before 1.7
 * FtpClient fc=new FtpClient(url,port);
 * fc.login(user, pwd);
 *  fc.binary();
 *  fc.put(remotefilename);
 *  fc.closeServer();
 *  
 * since 1.7
 * FtpClient fc = FtpClient.create(url)
 * fc.login(user, null, pwd);
 * fc.setBinaryType();
 * fc.put(remotefilename,true);
 * fc.close();