使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决

之前项目上开发了一个上传文件的功能,使用的是sun.net.ftp.FtpClient这个类

连接服务器的代码大概如下:

public static FtpClient ftpClient = null;

 ftpClient = new FtpClient();
 ftpClient.openServer(server);
  ftpClient.login(user, password);

之前这个功能是在jdk1.6基础上进行开发的。使用一切正常。

 

但是因为客户的环境上已经有了jdk1.7的环境,所以直接进行部署,发现文件上传失败,并且报如下错误:

cannont instantiate the type FtpClient

经过调查,发现

1) sun.net.ftp.FtpClient 这个类在jdk的帮助文档中没有具体的说明,也就是并没有对外公开。并且这个类是在jdk的 rt.jar中实现的。

2)jdk1.7下其构造函数FtpClient()被定义为private类型,所以无法new了。 在jdk1.7,已经换成了 FtpClient.create(ip)方法

同时,其他的一些方法也基本都改掉了,

如 ftpClient.openServer(server);
  ftpClient.login(user, password);

就可以换成:ftpClient.login(user, null, password);   

  ftpClient.binary();  --->  ftpClient.setBinaryType();   

ftpClient.put(remotefilename);--->ftpClient.putFileStream(remotefilename, true);   

等。

 

如果这样的话,解决这个问题有2个办法:

1. 重写这个上传功能, 但是1.6版本怎么办呢, 可能需要根据jdk版本进行分开处理

 

2. 在 既存的服务器上,构筑1.6的环境,然后 tomcat 启动的时候,加载1.6的jdk。

这个在linux或者windows上都非常方便。 如果windowss上,tomcat是以服务形式启动的话,直接修改,关联的java 虚拟机源就可以了。

 

 

 

 

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
使用 sun.net.ftp.ftpclient 工具类进行文件上传需要以下步骤: 1. 建立 FTP 连接:使用 `FtpClient` 类的 `openServer` 方法建立连接,需要传入 FTP 服务器的地址和端口号。 2. 登录 FTP 服务器:使用 `FtpClient` 类的 `login` 方法登录 FTP 服务器,需要传入 FTP 服务器的用户名和密码。 3. 切换到上传目录使用 `FtpClient` 类的 `cd` 方法切换到上传目录。 4. 设置上传模式:使用 `FtpClient` 类的 `setBinaryMode` 方法设置上传模式为二进制模式。 5. 上传文件:使用 `FtpClient` 类的 `put` 方法上传文件,需要传入本地文件的路径和上传后的文件名。 6. 关闭连接:使用 `FtpClient` 类的 `closeServer` 方法关闭连接。 以下是一个简单的上传文件的示例代码: ```java import sun.net.ftp.FtpClient; import java.io.FileInputStream; public class FtpUploader { public static void main(String[] args) throws Exception { String server = "ftp.example.com"; int port = 21; String username = "username"; String password = "password"; String localFilePath = "/path/to/local/file.txt"; String remoteFileName = "file.txt"; FtpClient ftpClient = new FtpClient(server, port); ftpClient.login(username, password); ftpClient.cd("/upload"); ftpClient.setBinaryMode(); FileInputStream fis = new FileInputStream(localFilePath); ftpClient.put(fis, remoteFileName); fis.close(); ftpClient.closeServer(); } } ``` 注意:`sun.net.ftp.FtpClient` 类是 Sun JDK 内部使用的类,不是公开的 API,因此可能会在不同版本的 JDK 中存在变化。建议使用第三方 FTP 客户端库,如 Apache Commons Net,来进行 FTP 操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值