JAVA技术实现上传下载文件到FTP服务器(完整)
具体详细介绍请看下文:
在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用ApacheJakartaCommonsNet(commons-net-3.3.jar)基于FileZillaServer服务器实现FTP服务器上文件的上传/下载/删除等操作。
关于FileZillaServer服务器的详细搭建配置过程,详情请见FileZillaServer安装配置教程。之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZillaServer都没有该问题,朋友们可以放心使用该代码。
FavFTPUtil.Java packagecom.favccxx.favsoft.util; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; importorg.apache.commons.net.ftp.FTPClient; importorg.apache.commons.net.ftp.FTPFile; importorg.apache.commons.net.ftp.FTPReply; publicclassFavFTPUtil{ /** *上传文件(可供Action/Controller层使用) *@paramhostnameFTP服务器地址 *@paramportFTP服务器端口号 *@paramusernameFTP登录帐号 *@parampasswordFTP登录密码 *@parampathnameFTP服务器保存目录 *@paramfileName上传到FTP服务器后的文件名称 *@paraminputStream输入文件流 *@return */ publicstaticbooleanuploadFile(Stringhostname,intport,Stringusername,Stringpassword,Stringpathname,StringfileName,InputStreaminputStream){ booleanflag=false; FTPClientftpClient=newFTPClient(); ftpClient.setControlEncoding("UTF-8"); try{ //连接FTP服务器 ftpClient.connect(hostname,port); //登录FTP服务器 ftpClient.login(username,password); //是否成功登录FTP服务器 intreplyCode=ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ returnflag; } ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.makeDirectory(pathname); ftpClient.changeWorkingDirectory(pathname); ftpClient.storeFile(fileName,inputStream); inputStream.close(); ftpClient.logout(); flag=true; }catch(Exceptione){ e.printStackTrace(); }finally{ if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOExceptione){ e.printStackTrace(); } } } returnflag; } /** *上传文件(可对文件进行重命名) *@paramhostnameFTP服务器地址 *@paramportFTP服务器端口号 *@paramusernameFTP登录帐号 *@parampasswordFTP登录密码 *@parampathnameFTP服务器保存目录 *@paramfilename上传到FTP服务器后的文件名称 *@paramoriginfilename待上传文件的名称(绝对地址) *@return */ publicstaticbooleanuploadFileFromProduction(Stringhostname,intport,Stringusername,Stringpassword,Stringpathname,Stringfilename,Stringoriginfilename){ booleanflag=false; try{ InputStreaminputStream=newFileInputStream(newFile(originfilename)); flag=uploadFile(hostname,port,username,password,pathname,filename,inputStream); }catch(Exceptione){ e.printStackTrace(); } returnflag; } /** *上传文件(不可以进行文件的重命名操作) *@paramhostnameFTP服务器地址 *@paramportFTP服务器端口号 *@paramusernameFTP登录帐号 *@parampasswordFTP登录密码 *@parampathnameFTP服务器保存目录 *@paramoriginfilename待上传文件的名称(绝对地址) *@return */ publicstaticbooleanuploadFileFromProduction(Stringhostname,intport,Stringusername,Stringpassword,Stringpathname,Stringoriginfilename){ booleanflag=false; try{ StringfileName=newFile(originfilename).getName(); InputStreaminputStream=newFileInputStream(newFile(originfilename)); flag=uploadFile(hostname,port,username,password,pathname,fileName,inputStream); }catch(Exceptione){ e.printStackTrace(); } returnflag; } /** *删除文件 *@paramhostnameFTP服务器地址 *@paramportFTP服务器端口号 *@paramusernameFTP登录帐号 *@parampasswordFTP登录密码 *@parampathnameFTP服务器保存目录 *@paramfilename要删除的文件名称 *@return */ publicstaticbooleandeleteFile(Stringhostname,intport,Stringusername,Stringpassword,Stringpathname,Stringfilename){ booleanflag=false; FTPClientftpClient=newFTPClient(); try{ //连接FTP服务器 ftpClient.connect(hostname,port); //登录FTP服务器 ftpClient.login(username,password); //验证FTP服务器是否登录成功 intreplyCode=ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ returnflag; } //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); ftpClient.dele(filename); ftpClient.logout(); flag=true; }catch(Exceptione){ e.printStackTrace(); }finally{ if(ftpClient.isConnected()){ try{ ftpClient.logout(); }catch(IOExceptione){ } } } returnflag; } /** *下载文件 *@paramhostnameFTP服务器地址 *@paramportFTP服务器端口号 *@paramusernameFTP登录帐号 *@parampasswordFTP登录密码 *@parampathnameFTP服务器文件目录 *@paramfilename文件名称 *@paramlocalpath下载后的文件路径 *@return */ publicstaticbooleandownloadFile(Stringhostname,intport,Stringusername,Stringpassword,Stringpathname,Stringfilename,Stringlocalpath){ booleanflag=false; FTPClientftpClient=newFTPClient(); try{ //连接FTP服务器 ftpClient.connect(hostname,port); //登录FTP服务器 ftpClient.login(username,password); //验证FTP服务器是否登录成功 intreplyCode=ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ returnflag; } //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); FTPFile[]ftpFiles=ftpClient.listFiles(); for(FTPFilefile:ftpFiles){ if(filename.equalsIgnoreCase(file.getName())){ FilelocalFile=newFile(localpath+"/"+file.getName()); OutputStreamos=newFileOutputStream(localFile); ftpClient.retrieveFile(file.getName(),os); os.close(); } } ftpClient.logout(); flag=true; }catch(Exceptione){ e.printStackTrace(); }finally{ if(ftpClient.isConnected()){ try{ ftpClient.logout(); }catch(IOExceptione){ } } } returnflag; } } FavFTPUtilTest.java packagecom.favccxx.favsoft.util; importjunit.framework.TestCase; publicclassFavFTPTestextendsTestCase{ publicvoidtestFavFTPUtil(){ Stringhostname="127.0.0.1"; intport=21; Stringusername="business"; Stringpassword="business"; Stringpathname="business/ebook"; Stringfilename="big.rar"; Stringoriginfilename="C:\\Users\\Downloads\\Downloads.rar"; FavFTPUtil.uploadFileFromProduction(hostname,port,username,password,pathname,filename,originfilename); //Stringlocalpath="D:/"; //FavFTPUtil.downloadFile(hostname,port,username,password,pathname,filename,localpath); } }
以上就是JAVA通过FTP上传下载文件的完整代码,希望对大家有所帮助。