您的位置:首页 > 编程语言 > Java开发

JAVA中使用FTPClient实现文件上传下载

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

所用到的jar包有:

commons-net-1.4.1.jar

jakarta-oro.jar

一、上传文件

查看源码

打印?

01
文件上传源代码
02
/**
03
*Description: 向FTP服务器上传文件
04
*@Version1.0
05
*@param url FTP服务器hostname
06
*@param port FTP服务器端口
07
*@param username FTP登录账号
08
*@param password FTP登录密码
09
*@param path FTP服务器保存目录
10
*@param filename 上传到FTP服务器上的文件名
11
*@param input 输入流
12
*@return 成功返回true,否则返回false
13
*/
14
public
static
boolean
uploadFile(
15
String url,
//FTP服务器hostname
16
int
port,
//FTP服务器端口
17
String username,
// FTP登录账号
18
String password,
//FTP登录密码
19
String path,
//FTP服务器保存目录
20
String filename,
//上传到FTP服务器上的文件名
21
InputStream input
// 输入流
22
) {
23
boolean
success =
false
;
24
FTPClient ftp =
new
FTPClient();
25
try
{
26
int
reply;
27
ftp.connect(url,port);
//连接FTP服务器
28
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
29
ftp.login(username,password);
//登录
30
reply = ftp.getReplyCode();
31
if
(!FTPReply.isPositiveCompletion(reply)) {
32
ftp.disconnect();
33
return
success;
34
}
35
ftp.changeWorkingDirectory(path);
36
ftp.storeFile(filename,input);
37
38
input.close();
39
ftp.logout();
40
success =
true
;
41
}
catch
(IOException e) {
42
e.printStackTrace();
43
}
finally
{
44
if
(ftp.isConnected()) {
45
try
{
46
ftp.disconnect();
47
}
catch
(IOException ioe) {
48
}
49
}
50
}
51
return
success;
52
}
以下是文件上传的测试用例:

查看源码

打印?

01
/**
02
*将本地文件上传到FTP服务器上
03
*
04
*/
05
public
void
testUpLoadFromDisk(){
06
try
{
07
FileInputStream in=
new
FileInputStream(
new
File(
"D:/test.txt"
));
08
boolean
flag = uploadFile(
"127.0.0.1"
,
21
,
"administrator"
,
"zyuc2011"
,
"test"
,
"test.txt"
,in);
09
System.out.println(flag);
10
}
catch
(FileNotFoundException e) {
11
e.printStackTrace();
12
}
13
}
查看源码

打印?

01
/**
02
*在FTP服务器上生成一个文件,并将一个字符串写入到该文件中 
03
*
04
*/
05
public
void
testUpLoadFromString(){
06
try
{
07
String str =
"这是要写入的字符串!"
;
08
InputStream input= 
new
ByteArrayInputStream(str.getBytes(
"utf-8"
));
09
boolean
flag = uploadFile(
"127.0.0.1"
,
21
,
"administrator"
,
"zyuc2011"
,
"test"
,
"test.txt"
,input);
10
System.out.println(flag);
11
}
catch
(UnsupportedEncodingException e) {
12
e.printStackTrace();
13
}
14
}
二、文件下载

查看源码

打印?

01
文件下载源代码
02
/**
03
*Description: 从FTP服务器下载文件 
04
*@Version1.0
05
*@param url FTP服务器hostname
06
*@param port FTP服务器端口
07
*@param username FTP登录账号
08
*@param password FTP登录密码
09
*@param remotePath FTP服务器上的相对路径 
10
*@param fileName 要下载的文件名 
11
*@param localPath 下载后保存到本地的路径 
12
*@return 
13
*/
14
public
static
boolean
downFile(
15
String url,
//FTP服务器hostname
16
int
port,
//FTP服务器端口
17
String username,
//FTP登录账号
18
String password,
//FTP登录密码
19
String remotePath,
//FTP服务器上的相对路径
20
String fileName,
//要下载的文件名
21
String localPath
//下载后保存到本地的路径
22
) {
23
boolean
success =
false
;
24
FTPClient ftp =
new
FTPClient();
25
try
{
26
int
reply;
27
ftp.connect(url,port);
28
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
29
ftp.login(username,password);
//登录
30
reply = ftp.getReplyCode();
31
if
(!FTPReply.isPositiveCompletion(reply)) {
32
ftp.disconnect();
33
return
success;
34
}
35
ftp.changeWorkingDirectory(remotePath);
//转移到FTP服务器目录
36
FTPFile[] fs = ftp.listFiles();
37
for
(FTPFile ff:fs){
38
if
(ff.getName().equals(fileName)){
39
File localFile =
new
File(localPath+
"/"
+ff.getName());
40
OutputStream is =
new
FileOutputStream(localFile);
41
ftp.retrieveFile(ff.getName(),is);
42
is.close();
43
}
44
}
45
46
ftp.logout();
47
success =
true
;
48
}
catch
(IOException e) {
49
e.printStackTrace();
50
}
finally
{
51
if
(ftp.isConnected()) {
52
try
{
53
ftp.disconnect();
54
}
catch
(IOException ioe) {
55
}
56
}
57
}
58
return
success;
59
}
以下是文件下载的测试用例:

查看源码

打印?

01
/**
02
*将FTP服务器上文件下载到本地 
03
*
04
*/
05
public
void
testDownFile(){
06
try
{
07
boolean
flag = downFile(
"127.0.0.1"
,
21
,
"administrator"
,
"zyuc2011"
,
"test"
,
"test.txt"
,
"D:/"
);
08
System.out.println(flag);
09
}
catch
(Exception e) {
10
e.printStackTrace();
11
}
12
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: