JAVA中使用FTPClient实现文件上传下载实例代码
在java程序开发中,ftp用的比较多,经常打交道,比如说向FTP服务器上传文件、下载文件,本文给大家介绍如何利用jakartacommons中的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></pre>
/**
*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;
}
下面我们写两个小例子:
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></pre>
@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();
}
}
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></pre>
@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();
}
}
二、下载文件
从FTP服务器下载文件的代码也很简单,参考如下:
/**
*Description:从FTP服务器下载文件
*@Version.Jul,::PMby崔红保(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></pre>