JAVA中使用FTPClient上傳下載

來源:互聯網
上載者:User

 在JAVA程式中,經常需要和FTP打交道,比如向FTP伺服器上傳檔案、下載檔案,本文簡單介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實現上傳下載檔案。

一、上傳檔案

         原理就不介紹了,大家直接看代碼吧

view plaincopy to clipboardprint?
  1. /**  
  2.  * Description: 向FTP伺服器上傳檔案  
  3.  * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔紅保(cuihongbao@d-heaven.com)建立  
  4.  * @param url FTP伺服器hostname  
  5.  * @param port FTP伺服器連接埠  
  6.  * @param username FTP登入帳號  
  7.  * @param password FTP登入密碼  
  8.  * @param path FTP伺服器儲存目錄  
  9.  * @param filename 上傳到FTP伺服器上的檔案名稱  
  10.  * @param input 輸入資料流  
  11.  * @return 成功返回true,否則返回false  
  12.  */  
  13. public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {   
  14.     boolean success = false;   
  15.     FTPClient ftp = new FTPClient();   
  16.     try {   
  17.         int reply;   
  18.         ftp.connect(url, port);//串連FTP伺服器   
  19.         //如果採用預設連接埠,可以使用ftp.connect(url)的方式直接連接FTP伺服器   
  20.         ftp.login(username, password);//登入   
  21.         reply = ftp.getReplyCode();   
  22.         if (!FTPReply.isPositiveCompletion(reply)) {   
  23.             ftp.disconnect();   
  24.             return success;   
  25.         }   
  26.         ftp.changeWorkingDirectory(path);   
  27.         ftp.storeFile(filename, input);            
  28.            
  29.         input.close();   
  30.         ftp.logout();   
  31.         success = true;   
  32.     } catch (IOException e) {   
  33.         e.printStackTrace();   
  34.     } finally {   
  35.         if (ftp.isConnected()) {   
  36.             try {   
  37.                 ftp.disconnect();   
  38.             } catch (IOException ioe) {   
  39.             }   
  40.         }   
  41.     }   
  42.     return success;   
  43. }<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?
  1. @Test  
  2. public void testUpLoadFromDisk(){   
  3.     try {   
  4.         FileInputStream in=new FileInputStream(new File("D:/test.txt"));   
  5.         boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in);   
  6.         System.out.println(flag);   
  7.     } catch (FileNotFoundException e) {   
  8.         e.printStackTrace();   
  9.     }   
  10. }<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?
  1. @Test  
  2. public void testUpLoadFromString(){   
  3.     try {   
  4.         InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8"));   
  5.         boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input);   
  6.         System.out.println(flag);   
  7.     } catch (UnsupportedEncodingException e) {   
  8.         e.printStackTrace();   
  9.     }   
  10. }<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?
  1. /**  
  2.  * Description: 從FTP伺服器下載檔案  
  3.  * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔紅保(cuihongbao@d-heaven.com)建立  
  4.  * @param url FTP伺服器hostname  
  5.  * @param port FTP伺服器連接埠  
  6.  * @param username FTP登入帳號  
  7.  * @param password FTP登入密碼  
  8.  * @param remotePath FTP伺服器上的相對路徑  
  9.  * @param fileName 要下載的檔案名稱  
  10.  * @param localPath 下載後儲存到本地的路徑  
  11.  * @return  
  12.  */  
  13. public static boolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) {   
  14.     boolean success = false;   
  15.     FTPClient ftp = new FTPClient();   
  16.     try {   
  17.         int reply;   
  18.         ftp.connect(url, port);   
  19.         //如果採用預設連接埠,可以使用ftp.connect(url)的方式直接連接FTP伺服器   
  20.         ftp.login(username, password);//登入   
  21.         reply = ftp.getReplyCode();   
  22.         if (!FTPReply.isPositiveCompletion(reply)) {   
  23.             ftp.disconnect();   
  24.             return success;   
  25.         }   
  26.         ftp.changeWorkingDirectory(remotePath);//轉移到FTP伺服器目錄   
  27.         FTPFile[] fs = ftp.listFiles();   
  28.         for(FTPFile ff:fs){   
  29.             if(ff.getName().equals(fileName)){   
  30.                 File localFile = new File(localPath+"/"+ff.getName());   
  31.                    
  32.                 OutputStream is = new FileOutputStream(localFile);    
  33.                 ftp.retrieveFile(ff.getName(), is);   
  34.                 is.close();   
  35.             }   
  36.         }   
  37.            
  38.         ftp.logout();   
  39.         success = true;   
  40.     } catch (IOException e) {   
  41.         e.printStackTrace();   
  42.     } finally {   
  43.         if (ftp.isConnected()) {   
  44.             try {   
  45.                 ftp.disconnect();   
  46.             } catch (IOException ioe) {   
  47.             }   
  48.         }   
  49.     }   
  50.     return success;   
  51. }<PRE></PRE>  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.