某些數(shù)據(jù)交換,我們需要通過(guò)ftp來(lái)完成。

sun.net.ftp.FtpClient 可以幫助我們進(jìn)行一些簡(jiǎn)單的ftp客戶端功能:下載、上傳文件。

但如遇到創(chuàng)建目錄之類(lèi)的就無(wú)能為力了,我們只好利用第三方源碼,比如 com.enterprisedt.net.ftp.FTPClient

下面寫(xiě)一些sun.net.ftp.FtpClient 的使用方法。

1、引入包

import?java.io.DataInputStream;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.FileInputStream;
import?java.util.ArrayList;
import?java.util.Date;
import?java.util.List;
import?sun.net.*;
import?sun.net.ftp.FtpClient;

2、我們建一個(gè)叫做FtpUtil的class

???/**
????*?connectServer
????*?連接ftp服務(wù)器
????*?@throws?java.io.IOException
????*?@param?path?文件夾,空代表根目錄
????*?@param?password?密碼
????*?@param?user???登陸用戶
????*?@param?server?服務(wù)器地址
????*/

??public?void?connectServer(String?server,?String?user,?String?password,??String?path)
??throws?IOException?
??{
?????//?server:FTP服務(wù)器的IP地址;user:登錄FTP服務(wù)器的用戶名
?????//?password:登錄FTP服務(wù)器的用戶名的口令;path:FTP服務(wù)器上的路徑
?????ftpClient?=?new?FtpClient();
?????ftpClient.openServer(server);
?????ftpClient.login(user,?password);
?????//path是ftp服務(wù)下主目錄的子目錄
?????if?(path.length()?!=?0)??ftpClient.cd(path);
?????//用2進(jìn)制上傳、下載
?????ftpClient.binary();?????
?}
?
?/**
????*?upload
????*?上傳文件
????*?@throws?java.lang.Exception
????*?@return?-1?文件不存在
????*??????????-2?文件內(nèi)容為空?
????*??????????>0?成功上傳,返回文件的大小
????*?@param?newname?上傳后的新文件名
????*?@param?filename?上傳的文件
????*/

?public?long?upload(String?filename,String?newname)?throws?Exception?
?{
?????long?result?=?0;
?????TelnetOutputStream?os?=?null;
?????FileInputStream?is?=?null;
?????try?{?????????
?????????java.io.File?file_in?=?new?java.io.File(filename);
?????????if?(!file_in.exists())?return?-1;
?????????if?(file_in.length()==0)?return?-2;
?????????os?=?ftpClient.put(newname);
?????????result?=?file_in.length();
?????????is?=?new?FileInputStream(file_in);
?????????byte[]?bytes?=?new?byte[1024];
?????????int?c;
?????????while?((c?=?is.read(bytes))?!=?-1)?{
??????????????os.write(bytes,?0,?c);
?????????}
?????}?finally?{
?????????if?(is?!=?null)?{
?????????????is.close();
?????????}
?????????if?(os?!=?null)?{
????????????os.close();
?????????}
?????}
????return?result;
?}
?/**
????*?upload
????*?@throws?java.lang.Exception
????*?@return?
????*?@param?filename
????*/

?public?long?upload(String?filename)
?throws?Exception?
?{
????String?newname?=?"";
????if?(filename.indexOf("/")>-1)
????{
???????newname?=?filename.substring(filename.lastIndexOf("/")+1);
????}else
????{
???????newname?=?filename;
????}
????return?upload(filename,newname);
?}
?
?/**
????*??download
????*??從ftp下載文件到本地
????*?@throws?java.lang.Exception
????*?@return?
????*?@param?newfilename?本地生成的文件名
????*?@param?filename?服務(wù)器上的文件名
????*/

?public?long?download(String?filename,String?newfilename)?
?throws?Exception
?{??
????long?result?=?0;
????TelnetInputStream?is?=?null;
????FileOutputStream?os?=?null;
????try?
????{
???????is?=?ftpClient.get(filename);???????
???????java.io.File?outfile?=?new?java.io.File(newfilename);
???????os?=?new?FileOutputStream(outfile);
???????byte[]?bytes?=?new?byte[1024];
???????int?c;
???????while?((c?=?is.read(bytes))?!=?-1)?{
???????????os.write(bytes,?0,?c);
???????????result?=?result?+?c;
???????}
????}?catch?(IOException?e)?
????{
???????e.printStackTrace();
????}
????finally?{
?????????if?(is?!=?null)?{
?????????????is.close();
?????????}
?????????if?(os?!=?null)?{
????????????os.close();
?????????}
?????}
?????return?result;
?}
?/**
??*?取得某個(gè)目錄下的所有文件列表
??*
??*/

?public?List?getFileList(String?path)
?{
????List?list?=?new?ArrayList();
????try?
????{
???????DataInputStream?dis?=?new??DataInputStream(ftpClient.nameList(path));
???????String?filename?=?"";
???????while((filename=dis.readLine())!=null)??
???????{??
?????????list.add(filename);????????
???????}??
???
????}?catch?(Exception?e)?
????{
???????e.printStackTrace();
????}
????return?list;
?}
?
?/**
????*?closeServer
????*?斷開(kāi)與ftp服務(wù)器的鏈接
????*?@throws?java.io.IOException
????*/

?public?void?closeServer()
?throws?IOException?
?{???
???try?
???{
??????if?(ftpClient?!=?null)?
??????{
????????ftpClient.closeServer();?????
??????}
???}?catch?(IOException?e)?{
??????e.printStackTrace();
???}
?}
??
??public?static?void?main(String?[]?args)?throws?Exception?
??{
????FtpUtil?ftp?=?new?FtpUtil();
????try?{
?????????//連接ftp服務(wù)器
?????????ftp.connectServer("10.163.7.15",?"cxl",?"1",?"info2");
?????????/**??上傳文件到?info2?文件夾下?*/
?????????System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"字節(jié)");
?????????/**?取得info2文件夾下的所有文件列表,并下載到?E盤(pán)下?*/
?????????List?list?=?ftp.getFileList(".");
?????????for?(int?i=0;i<list.size();i++)
?????????{
????????????String?filename?=?(String)list.get(i);
????????????System.out.println(filename);
????????????ftp.download(filename,"E:/"+filename);
?????????}
????}?catch?(Exception?e)?{
???????///
????}finally
????{
???????ftp.closeServer();
????}
??}??
}