Java FTPClient实现文件上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakartacommons中的FTPClient(在commons-net包中)实现上传下载文件。
所用到的jar包有:
commons-net-1.4.1.jar
jakarta-oro.jar
一、上传文件
文件上传源代码 /** *Description:向FTP服务器上传文件 *@Version1.0 *@paramurlFTP服务器hostname *@paramportFTP服务器端口 *@paramusernameFTP登录账号 *@parampasswordFTP登录密码 *@parampathFTP服务器保存目录 *@paramfilename上传到FTP服务器上的文件名 *@paraminput输入流 *@return成功返回true,否则返回false */ publicstaticbooleanuploadFile( Stringurl,//FTP服务器hostname intport,//FTP服务器端口 Stringusername,//FTP登录账号 Stringpassword,//FTP登录密码 Stringpath,//FTP服务器保存目录 Stringfilename,//上传到FTP服务器上的文件名 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; }
以下是文件上传的测试用例:
/** *将本地文件上传到FTP服务器上 * */ publicvoidtestUpLoadFromDisk(){ try{ FileInputStreamin=newFileInputStream(newFile("D:/test.txt")); booleanflag=uploadFile("127.0.0.1",21,"administrator","zyuc2011","test","test.txt",in); System.out.println(flag); }catch(FileNotFoundExceptione){ e.printStackTrace(); } } /** *在FTP服务器上生成一个文件,并将一个字符串写入到该文件中 * */ publicvoidtestUpLoadFromString(){ try{ Stringstr="这是要写入的字符串!"; InputStreaminput=newByteArrayInputStream(str.getBytes("utf-8")); booleanflag=uploadFile("127.0.0.1",21,"administrator","zyuc2011","test","test.txt",input); System.out.println(flag); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } }
二、文件下载
文件下载源代码
/** *Description:从FTP服务器下载文件 *@Version1.0 *@paramurlFTP服务器hostname *@paramportFTP服务器端口 *@paramusernameFTP登录账号 *@parampasswordFTP登录密码 *@paramremotePathFTP服务器上的相对路径 *@paramfileName要下载的文件名 *@paramlocalPath下载后保存到本地的路径 *@return */ publicstaticbooleandownFile( Stringurl,//FTP服务器hostname intport,//FTP服务器端口 Stringusername,//FTP登录账号 Stringpassword,//FTP登录密码 StringremotePath,//FTP服务器上的相对路径 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; }
以下是文件下载的测试用例:
/** *将FTP服务器上文件下载到本地 * */ publicvoidtestDownFile(){ try{ booleanflag=downFile("127.0.0.1",21,"administrator","zyuc2011","test","test.txt","D:/"); System.out.println(flag); }catch(Exceptione){ e.printStackTrace(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助。