博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java FTPClient实现文件上传下载
阅读量:4470 次
发布时间:2019-06-08

本文共 3501 字,大约阅读时间需要 11 分钟。

在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。

所用到的jar包有:  
commons-net-1.4.1.jar  
jakarta-oro.jar  

 

一、上传文件

文件上传源代码
 
文件上传源代码
   
/**
  
* Description: 向FTP服务器上传文件
  
* @Version1.0
  
* @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,
//FTP服务器hostname
   
int
port,
//FTP服务器端口
   
String username,
// FTP登录账号
   
String password,
//FTP登录密码
   
String path,
//FTP服务器保存目录
   
String filename,
//上传到FTP服务器上的文件名
   
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;
 
}

以下是文件上传的测试用例:

/**
 
* 将本地文件上传到FTP服务器上
 
*
 
*/
public 
void 
testUpLoadFromDisk(){
 
try 
{
  
FileInputStream in=
new 
FileInputStream(
new 
File(
"D:/test.txt"
));
  
boolean 
flag = uploadFile(
"127.0.0.1"
21
"administrator"
"zyuc2011"
"test"
"test.txt"
, in);
  
System.out.println(flag);
 
catch 
(FileNotFoundException e) {
  
e.printStackTrace();
 
}
/**
 
* 在FTP服务器上生成一个文件,并将一个字符串写入到该文件中
 
*
 
*/
public 
void 
testUpLoadFromString(){
 
try 
{
  
String str = 
"这是要写入的字符串!"
;
  
InputStream input = 
new 
ByteArrayInputStream(str.getBytes(
"utf-8"
));
  
boolean 
flag = uploadFile(
"127.0.0.1"
21
"administrator"
"zyuc2011"
"test"
"test.txt"
, input); 
  
System.out.println(flag);
 
catch 
(UnsupportedEncodingException e) {
  
e.printStackTrace();
 
}
}

 

/**
 
* 将FTP服务器上文件下载到本地
 
*
 
*/
public 
void 
testDownFile(){
 
try 
{
  
boolean 
flag = downFile(
"127.0.0.1"
21
"administrator"
"zyuc2011"
"test"
"test.txt"
"D:/"
); 
  
System.out.println(flag);
 
catch 
(Exception e) {
  
e.printStackTrace();
 
}  
}

/**

* Description: 从FTP服务器下载文件
* @Version1.0
* @param url FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param remotePath FTP服务器上的相对路径
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @return
*/
public static boolean downFile(
String url, //FTP服务器hostname
int port,//FTP服务器端口
String username, //FTP登录账号
String password, //FTP登录密码
String remotePath,//FTP服务器上的相对路径
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;
}

 
 

转载于:https://www.cnblogs.com/muliu/p/6126644.html

你可能感兴趣的文章
专题:动态内存分配----基础概念篇
查看>>
Codeforces Round #426 (Div. 2) (A B C)
查看>>
The Most Simple Introduction to Hypothesis Testing
查看>>
UVA10791
查看>>
P2664 树上游戏
查看>>
jQuery 停止动画
查看>>
Sharepoint Solution Gallery Active Solution时激活按钮灰色不可用的解决方法
查看>>
教你50招提升ASP.NET性能(二十二):利用.NET 4.5异步结构
查看>>
lua连续随机数
查看>>
checkstyle使用介绍
查看>>
会了这十种Python优雅的写法,让你工作效率翻十倍,一人顶十人用!
查看>>
二维码图片生成
查看>>
在做操作系统实验的一些疑问
查看>>
Log4J日志配置详解
查看>>
NameNode 与 SecondaryNameNode 的工作机制
查看>>
Code obfuscation
查看>>
大厂资深面试官 带你破解Android高级面试
查看>>
node.js系列(实例):原生node.js实现接收前台post请求提交数据
查看>>
SignalR主动通知订阅者示例
查看>>
用python实现矩阵转置
查看>>