我开发了一个项目,使用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 。
欢迎任何解决此问题的建议?
答案 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();