from: http://www.open-open.com/lib/view/open1333860679171.html
- 所用到的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 | } |