Java通过FTP服务器上传下载文件的方法
对于使用文件进行交换数据的应用来说,使用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);
}
}
以上是本文的全部内容,希望大家喜欢。