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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。