在JAVA程式中,經常需要和FTP打交道,比如向FTP伺服器上傳檔案、下載檔案,本文簡單介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實現上傳下載檔案。
一、上傳檔案
原理就不介紹了,大家直接看代碼吧
view plaincopy to clipboardprint?
- /**
- * 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;
- }<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伺服器上,代碼如下:
view plaincopy to clipboardprint?
- @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();
- }
- }<PRE></PRE>
@Testpublic 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伺服器上產生一個檔案,並將一個字串寫入到該檔案中
view plaincopy to clipboardprint?
- @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();
- }
- }<PRE></PRE>
@Testpublic 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伺服器下載檔案的代碼也很簡單,參考如下:
view plaincopy to clipboardprint?
- /**
- * Description: 從FTP伺服器下載檔案
- * @Version1.0 Jul 27, 2008 5:32:36 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
- */
- public static boolean 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>