在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 }
所用到的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 }