之前項目上開發了一個上傳文件的功能,使用的是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 虛擬機源就可以了。