JAVA中使用FTPClient上傳下載(轉(zhuǎn)載)
轉(zhuǎn)載地址: http://blog.csdn.net/hbcui1984/archive/2008/07/27/2720204.aspx在JAVA程序中,經(jīng)常需要和FTP打交道,比如向FTP服務(wù)器上傳文件、下載文件,本文簡單介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實現(xiàn)上傳下載文件。
一、上傳文件
???????? 原理就不介紹了,大家直接看代碼吧
- /**
- * Description: 向FTP服務(wù)器上傳文件
- * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔紅保(cuihongbao@d-heaven.com)創(chuàng)建
- * @param url FTP服務(wù)器hostname
- * @param port FTP服務(wù)器端口
- * @param username FTP登錄賬號
- * @param password FTP登錄密碼
- * @param path FTP服務(wù)器保存目錄
- * @param filename 上傳到FTP服務(wù)器上的文件名
- * @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服務(wù)器 ??
- ???????? //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務(wù)器 ??
- ???????? 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; ??
- }
/** * Description: 向FTP服務(wù)器上傳文件 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔紅保(cuihongbao@d-heaven.com)創(chuàng)建 * @param url FTP服務(wù)器hostname * @param port FTP服務(wù)器端口 * @param username FTP登錄賬號 * @param password FTP登錄密碼 * @param path FTP服務(wù)器保存目錄 * @param filename 上傳到FTP服務(wù)器上的文件名 * @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服務(wù)器 //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務(wù)器 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服務(wù)器上,代碼如下:
- @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服務(wù)器上生成一個文件,并將一個字符串寫入到該文件中
- @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服務(wù)器下載文件的代碼也很簡單,參考如下:
- /**
- * Description: 從FTP服務(wù)器下載文件
- * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔紅保(cuihongbao@d-heaven.com)創(chuàng)建
- * @param url FTP服務(wù)器hostname
- * @param port FTP服務(wù)器端口
- * @param username FTP登錄賬號
- * @param password FTP登錄密碼
- * @param remotePath FTP服務(wù)器上的相對路徑
- * @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服務(wù)器 ??
- ???????? ftp.login(username, password); //登錄 ??
- ???????? reply = ftp.getReplyCode(); ??
- ???????? if (!FTPReply.isPositiveCompletion(reply)) { ??
- ???????????? ftp.disconnect(); ??
- ???????????? return success; ??
- ???????? } ??
- ???????? ftp.changeWorkingDirectory(remotePath); //轉(zhuǎn)移到FTP服務(wù)器目錄 ??
- ???????? 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; ??
- }
posted on 2008-10-05 16:02 picture talk 閱讀(419) 評論(0) 編輯 收藏