使用JDK 1.7获取sun.net.ftp.FtpClient的错误
我开发了一个项目,使用使用JDK 1.7获取sun.net.ftp.FtpClient的错误,ftp,java-7,ftp-client,sun,Ftp,Java 7,Ftp Client,Sun,我开发了一个项目,使用sun.net.ftp.FtpClient类从ftp服务器下载一个文件,当时我正在使用JDK1.5。 现在我已经切换到JDK1.7,我得到以下错误 java: sun.net.ftp.FtpClient is abstract; cannot be instantiated 对我来说,JDK 1.7不支持FtpClient 欢迎提出任何解决此问题的建议 您不应该在sun.*中使用类-不能保证它们在java版本之间保持兼容 我建议重写,改为使用类似的内容。它应该非常简单易用
sun.net.ftp.FtpClient
类从ftp服务器下载一个文件,当时我正在使用JDK1.5。
现在我已经切换到JDK1.7,我得到以下错误
java: sun.net.ftp.FtpClient is abstract; cannot be instantiated
对我来说,JDK 1.7不支持FtpClient
欢迎提出任何解决此问题的建议 您不应该在
sun.*
中使用类-不能保证它们在java版本之间保持兼容
我建议重写,改为使用类似的内容。它应该非常简单易用,因此应该是一项容易的工作。即使应该避免使用
sun中的类。*
中的类也是正确的,但答案除了建议一种替代方法外,并没有适当地解决错误
我在您试图实例化sun.net.ftp.FtpClient
的上下文中没有作用域,但仍然可以这样做
该类是抽象的,因此不能实例化它。(见附件)
不过,一切都没有失去。
要获取FtpClient
的实例,您可以使用SDK中的sun.net.ftp.FtpClientProvider
中的静态方法来执行此操作,如下例所示:
...
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());
...
这需要做更多的工作,但它允许您避免添加包含大量不需要的类的新库—这取决于您想做什么。自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();