JAVA中使用FTPClient实现文件上传下载
作者:网络转载 发布时间:[ 2015/5/26 14:57:09 ] 推荐标签:开发语言
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。
一、上传文件
原理不介绍了,大家直接看代码吧
/**
*Description:向FTP服务器上传文件
*@Version1.0 Jul 27,2008 4:31:09 PM by崔红保(cuihongbao@d-heaven.com)创建
*@param url FTP服务器hostname
*@param port FTP服务器端口
*@param username FTP登录账号
*@param password FTP登录密码
*@param path FTP服务器保存目录
*@param filename上传到FTP服务器上的文件名
*@param input输入流
*@return成功返回true,否则返回false
*/
publicstaticboolean uploadFile(String url,int port,String username,String password,String path,String filename,InputStream input){
boolean success=false;
FTPClient ftp=new FTPClient();
try{
int reply;
ftp.connect(url,port);//连接FTP服务器
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username,password);//登录
reply=ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename,input);
input.close();
ftp.logout();
success=true;
}catch(IOException e){
e.printStackTrace();
}finally{
if(ftp.isConnected()){
try{
ftp.disconnect();
}catch(IOException ioe){
}
}
}
return success;
}<pre></pre>
/**
*Description:向FTP服务器上传文件
*@Version1.0 Jul 27,2008 4:31:09 PM by崔红保(cuihongbao@d-heaven.com)创建
*@param url FTP服务器hostname
*@param port FTP服务器端口
*@param username FTP登录账号
*@param password FTP登录密码
*@param path FTP服务器保存目录
*@param filename上传到FTP服务器上的文件名
*@param input输入流
*@return成功返回true,否则返回false
*/
public static boolean uploadFile(String url,int port,String username,String password,String path,String filename,InputStream input){
boolean success=false;
FTPClient ftp=new FTPClient();
try{
int reply;
ftp.connect(url,port);//连接FTP服务器
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username,password);//登录
reply=ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename,input);
input.close();
ftp.logout();
success=true;
}catch(IOException e){
e.printStackTrace();
}finally{
if(ftp.isConnected()){
try{
ftp.disconnect();
}catch(IOException ioe){
}
}
}
return success;
}
下面我们写两个小例子:
1.将本地文件上传到FTP服务器上,代码如下:
@Test
publicvoid testUpLoadFromDisk(){
try{
FileInputStream in=new FileInputStream(new File("D:/test.txt"));
boolean flag=uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt",in);
System.out.println(flag);
}catch(FileNotFoundException e){
e.printStackTrace();
}
}<pre></pre>
@Test
public void testUpLoadFromDisk(){
try{
FileInputStream in=new FileInputStream(new File("D:/test.txt"));
boolean flag=uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt",in);
System.out.println(flag);
}catch(FileNotFoundException e){
e.printStackTrace();
}
}
2.在FTP服务器上生成一个文件,并将一个字符串写入到该文件中
@Test
publicvoid testUpLoadFromString(){
try{
InputStream input=new ByteArrayInputStream("test ftp".getBytes("utf-8"));
boolean flag=uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt",input);
System.out.println(flag);
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}
}<pre></pre>
@Test
public void testUpLoadFromString(){
try{
InputStream input=new ByteArrayInputStream("test ftp".getBytes("utf-8"));
boolean flag=uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt",input);
System.out.println(flag);
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}
}
二、下载文件
从FTP服务器下载文件的代码也很简单,参考如下:
/**
*Description:从FTP服务器下载文件
*@Version1.0 Jul 27,2008 5:32:36 PM by崔红保(cuihongbao@d-heaven.com)创建
*@param url FTP服务器hostname
*@param port FTP服务器端口
*@param username FTP登录账号
*@param password FTP登录密码
*@param remotePath FTP服务器上的相对路径
*@param fileName要下载的文件名
*@param localPath下载后保存到本地的路径
*@return
*/
publicstaticboolean downFile(String url,int port,String username,String password,String remotePath,String fileName,String localPath){
boolean success=false;
FTPClient ftp=new FTPClient();
try{
int reply;
ftp.connect(url,port);
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username,password);//登录
reply=ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
FTPFile[]fs=ftp.listFiles();
for(FTPFile ff:fs){
if(ff.getName().equals(fileName)){
File localFile=new File(localPath+"/"+ff.getName());
OutputStream is=new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(),is);
is.close();
}
}
ftp.logout();
success=true;
}catch(IOException e){
e.printStackTrace();
}finally{
if(ftp.isConnected()){
try{
ftp.disconnect();
}catch(IOException ioe){
}
}
}
return success;
}<pre></pre>
来源:http://blog.csdn.net/hbcui1984/article/details/2720204
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11