首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JDK1.7获取sun.net.ftp.FtpClient错误

使用JDK1.7获取sun.net.ftp.FtpClient错误
EN

Stack Overflow用户
提问于 2013-12-20 08:35:22
回答 3查看 16.4K关注 0票数 2

我开发了一个使用sun.net.ftp.FtpClient类从使用JDK1.5的ftp服务器下载文件的项目。现在,我切换到JDK1.7,并得到以下错误。

代码语言:javascript
复制
java: sun.net.ftp.FtpClient is abstract; cannot be instantiated

它接踵而至,JDK1.7不支持FtpClient

有什么解决这个问题的建议是欢迎的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-20 09:23:23

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

我建议重写一下,使用类似于Apache Commons FTP的东西。它应该是相当简单的使用,所以它应该是一个容易的工作。

票数 6
EN

Stack Overflow用户

发布于 2015-02-13 08:46:25

尽管应该避免使用sun.*中的类,但除了建议另一种方法之外,答案并不能恰当地解决错误。

在您试图实例化sun.net.ftp.FtpClient的上下文中,我没有一个范围--但是仍然可以这样做。

这个类是抽象的,所以不能实例化它。(见§8.1.1.1)

不过,并不是所有的东西都丢失了。要获得FtpClient的实例,可以使用SDK中的sun.net.ftp.FtpClientProvider中的静态方法这样做,如下面的示例所示:

代码语言:javascript
复制
...
final FtpClient ftpClient = FtpClientProvider.provider().createFtpClient();
final InetAddress inetAddress = InetAddress.getByName(ftpUrl.getHost());
final int port = ftpUrl.getPort();
final InetSocketAddress socketAddress = new InetSocketAddress(inetAddress, port);
ftpClient.connect(socketAddress);
ftpClient.login(username, password.toCharArray());
...

还有更多的工作要做,但它允许您避免添加包含大量不需要的类的新库--这取决于您想要做什么。

票数 3
EN

Stack Overflow用户

发布于 2015-03-20 01:45:17

自1.7以来出现了一些变化。例如:

代码语言:javascript
复制
 * 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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20699367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档