使用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()被定義爲protect類型,所以無法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 虛擬機源就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章