在java程序開發中,ftp用的比較多,經常打交道,比如說向FTP服務器上傳文件、下載文件,本文給大家介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實現上傳下載文件。
一、上傳文件
原理就不介紹了,大家直接看代碼吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/** * 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服務器上,代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@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服務器上生成一個文件,并將一個字符串寫入到該文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@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服務器下載文件的代碼也很簡單,參考如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/** * Description: 從FTP服務器下載文件 * @Version. Jul , :: 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> |