JAVA中使用FTPClient上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。
一、上传文件
原理就不介绍了,大家直接看代码吧
- /**
- *Description:向FTP服务器上传文件
- *@Version1.0Jul27,20084:31:09PMby崔红保(cuihongbao@d-heaven.com)创建
- *@paramurlFTP服务器hostname
- *@paramportFTP服务器端口
- *@paramusernameFTP登录账号
- *@parampasswordFTP登录密码
- *@parampathFTP服务器保存目录
- *@paramfilename上传到FTP服务器上的文件名
- *@paraminput输入流
- *@return成功返回true,否则返回false
- */
- publicstaticbooleanuploadFile(Stringurl,intport,Stringusername,Stringpassword,Stringpath,Stringfilename,InputStreaminput){
- booleansuccess=false;
- FTPClientftp=newFTPClient();
- try{
- intreply;
- ftp.connect(url,port);//连接FTP服务器
- //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
- ftp.login(username,password);//登录
- reply=ftp.getReplyCode();
- if(!FTPReply.isPositiveCompletion(reply)){
- ftp.disconnect();
- returnsuccess;
- }
- ftp.changeWorkingDirectory(path);
- ftp.storeFile(filename,input);
- input.close();
- ftp.logout();
- success=true;
- }catch(IOExceptione){
- e.printStackTrace();
- }finally{
- if(ftp.isConnected()){
- try{
- ftp.disconnect();
- }catch(IOExceptionioe){
- }
- }
- }
- returnsuccess;
- }<PRE>
下面我们写两个小例子:
1.将本地文件上传到FTP服务器上,代码如下:
- @Test
- publicvoidtestUpLoadFromDisk(){
- try{
- FileInputStreamin=newFileInputStream(newFile("D:/test.txt"));
- booleanflag=uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt",in);
- System.out.println(flag);
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }
- }<PRE>
2.在FTP服务器上生成一个文件,并将一个字符串写入到该文件中
- @Test
- publicvoidtestUpLoadFromString(){
- try{
- InputStreaminput=newByteArrayInputStream("testftp".getBytes("utf-8"));
- booleanflag=uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt",input);
- System.out.println(flag);
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }
- }<PRE>
二、下载文件
从FTP服务器下载文件的代码也很简单,参考如下:
- /**
- *Description:从FTP服务器下载文件
- *@Version1.0Jul27,20085:32:36PMby崔红保(cuihongbao@d-heaven.com)创建
- *@paramurlFTP服务器hostname
- *@paramportFTP服务器端口
- *@paramusernameFTP登录账号
- *@parampasswordFTP登录密码
- *@paramremotePathFTP服务器上的相对路径
- *@paramfileName要下载的文件名
- *@paramlocalPath下载后保存到本地的路径
- *@return
- */
- publicstaticbooleandownFile(Stringurl,intport,Stringusername,Stringpassword,StringremotePath,StringfileName,StringlocalPath){
- booleansuccess=false;
- FTPClientftp=newFTPClient();
- try{
- intreply;
- ftp.connect(url,port);
- //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
- ftp.login(username,password);//登录
- reply=ftp.getReplyCode();
- if(!FTPReply.isPositiveCompletion(reply)){
- ftp.disconnect();
- returnsuccess;
- }
- ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
- FTPFile[]fs=ftp.listFiles();
- for(FTPFileff:fs){
- if(ff.getName().equals(fileName)){
- FilelocalFile=newFile(localPath+"/"+ff.getName());
- OutputStreamis=newFileOutputStream(localFile);
- ftp.retrieveFile(ff.getName(),is);
- is.close();
- }
- }
- ftp.logout();
- success=true;
- }catch(IOExceptione){
- e.printStackTrace();
- }finally{
- if(ftp.isConnected()){
- try{
- ftp.disconnect();
- }catch(IOExceptionioe){
- }
- }
- }
- returnsuccess;
- }<PRE>