JAVA使用FTPClient類讀寫FTP

見:http://blog.csdn.net/kardelpeng/article/details/6588284




1.首先先導入相關jar包

2.創建一個連接FTP的工具類FTPUtil.Java

[java]?view plaincopy
  1. package?com.metarnet.ftp.util;??
  2. ??
  3. import?java.io.IOException;??
  4. import?java.io.InputStream;??
  5. import?java.net.SocketException;??
  6. import?java.util.Properties;??
  7. ??
  8. import?org.apache.commons.net.ftp.FTPClient;??
  9. import?org.apache.commons.net.ftp.FTPReply;??
  10. import?org.apache.log4j.Logger;??
  11. ??
  12. public?class?FTPUtil?{??
  13. ????private?static?Logger?logger?=?Logger.getLogger(FTPUtil.class);??
  14. ??
  15. ??????
  16. ??????
  17. ????/**?
  18. ?????*?獲取FTPClient對象?
  19. ?????*?@param?ftpHost?FTP主機服務器?
  20. ?????*?@param?ftpPassword?FTP?登錄密碼?
  21. ?????*?@param?ftpUserName?FTP登錄用戶名?
  22. ?????*?@param?ftpPort?FTP端口?默認為21?
  23. ?????*?@return?
  24. ?????*/??
  25. ????public?static?FTPClient?getFTPClient(String?ftpHost,?String?ftpPassword,??
  26. ????????????String?ftpUserName,?int?ftpPort)?{??
  27. ????????FTPClient?ftpClient?=?null;??
  28. ????????try?{??
  29. ????????????ftpClient?=?new?FTPClient();??
  30. ????????????ftpClient.connect(ftpHost,?ftpPort);//?連接FTP服務器??
  31. ????????????ftpClient.login(ftpUserName,?ftpPassword);//?登陸FTP服務器??
  32. ????????????if?(!FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))?{??
  33. ????????????????logger.info("未連接到FTP,用戶名或密碼錯誤。");??
  34. ????????????????ftpClient.disconnect();??
  35. ????????????}?else?{??
  36. ????????????????logger.info("FTP連接成功。");??
  37. ????????????}??
  38. ????????}?catch?(SocketException?e)?{??
  39. ????????????e.printStackTrace();??
  40. ????????????logger.info("FTP的IP地址可能錯誤,請正確配置。");??
  41. ????????}?catch?(IOException?e)?{??
  42. ????????????e.printStackTrace();??
  43. ????????????logger.info("FTP的端口錯誤,請正確配置。");??
  44. ????????}??
  45. ????????return?ftpClient;??
  46. ????}??
  47. }??

3.編寫一個讀取FTP上文件的類ReadFTPFile.java
[java]?view plaincopy
  1. package?com.metarnet.ftp.read;??
  2. ??
  3. import?java.io.BufferedReader;??
  4. import?java.io.FileInputStream;??
  5. import?java.io.FileNotFoundException;??
  6. import?java.io.IOException;??
  7. import?java.io.InputStream;??
  8. import?java.io.InputStreamReader;??
  9. import?java.net.SocketException;??
  10. ??
  11. import?org.apache.commons.net.ftp.FTPClient;??
  12. import?org.apache.log4j.Logger;??
  13. ??
  14. import?com.metarnet.ftp.util.FTPUtil;??
  15. ??
  16. public?class?ReadFTPFile?{??
  17. ????private?Logger?logger?=?Logger.getLogger(ReadFTPFile.class);??
  18. ??
  19. ????/**?
  20. ?????*?去?服務器的FTP路徑下上讀取文件?
  21. ?????*??
  22. ?????*?@param?ftpUserName?
  23. ?????*?@param?ftpPassword?
  24. ?????*?@param?ftpPath?
  25. ?????*?@param?FTPServer?
  26. ?????*?@return?
  27. ?????*/??
  28. ????public?String?readConfigFileForFTP(String?ftpUserName,?String?ftpPassword,??
  29. ????????????String?ftpPath,?String?ftpHost,?int?ftpPort,?String?fileName)?{??
  30. ????????StringBuffer?resultBuffer?=?new?StringBuffer();??
  31. ????????FileInputStream?inFile?=?null;??
  32. ????????InputStream?in?=?null;??
  33. ????????FTPClient?ftpClient?=?null;??
  34. ????????logger.info("開始讀取絕對路徑"?+?ftpPath?+?"文件!");??
  35. ????????try?{??
  36. ????????????ftpClient?=?FTPUtil.getFTPClient(ftpHost,?ftpPassword,?ftpUserName,??
  37. ????????????????????ftpPort);??
  38. ????????????ftpClient.setControlEncoding("UTF-8");?//?中文支持??
  39. ????????????ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);??
  40. ????????????ftpClient.enterLocalPassiveMode();??
  41. ????????????ftpClient.changeWorkingDirectory(ftpPath);??
  42. ????????????in?=?ftpClient.retrieveFileStream(fileName);??
  43. ????????}?catch?(FileNotFoundException?e)?{??
  44. ????????????logger.error("沒有找到"?+?ftpPath?+?"文件");??
  45. ????????????e.printStackTrace();??
  46. ????????????return?"下載配置文件失敗,請聯系管理員.";??
  47. ????????}?catch?(SocketException?e)?{??
  48. ????????????logger.error("連接FTP失敗.");??
  49. ????????????e.printStackTrace();??
  50. ????????}?catch?(IOException?e)?{??
  51. ????????????e.printStackTrace();??
  52. ????????????logger.error("文件讀取錯誤。");??
  53. ????????????e.printStackTrace();??
  54. ????????????return?"配置文件讀取失敗,請聯系管理員.";??
  55. ????????}??
  56. ????????if?(in?!=?null)?{??
  57. ????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(in));??
  58. ????????????String?data?=?null;??
  59. ????????????try?{??
  60. ????????????????while?((data?=?br.readLine())?!=?null)?{??
  61. ????????????????????resultBuffer.append(data?+?"\n");??
  62. ????????????????}??
  63. ????????????}?catch?(IOException?e)?{??
  64. ????????????????logger.error("文件讀取錯誤。");??
  65. ????????????????e.printStackTrace();??
  66. ????????????????return?"配置文件讀取失敗,請聯系管理員.";??
  67. ????????????}finally{??
  68. ????????????????try?{??
  69. ????????????????????ftpClient.disconnect();??
  70. ????????????????}?catch?(IOException?e)?{??
  71. ????????????????????e.printStackTrace();??
  72. ????????????????}??
  73. ????????????}??
  74. ????????}else{??
  75. ????????????logger.error("in為空,不能讀取。");??
  76. ????????????return?"配置文件讀取失敗,請聯系管理員.";??
  77. ????????}??
  78. ????????return?resultBuffer.toString();??
  79. ????}??
  80. }??
4.創建一個往FTP上寫入文件的類WriteFTPFile.java

[java]?view plaincopy
  1. package?com.metarnet.ftp.write;??
  2. ??
  3. import?java.io.BufferedWriter;??
  4. import?java.io.File;??
  5. import?java.io.FileInputStream;??
  6. import?java.io.FileWriter;??
  7. import?java.io.IOException;??
  8. import?java.io.InputStream;??
  9. ??
  10. import?org.apache.commons.net.ftp.FTPClient;??
  11. import?org.apache.commons.net.ftp.FTPFile;??
  12. import?org.apache.log4j.Logger;??
  13. ??
  14. import?com.metarnet.ftp.util.FTPUtil;??
  15. ??
  16. public?class?WriteFTPFile?{??
  17. ??
  18. ????private?Logger?logger?=?Logger.getLogger(WriteFTPFile.class);??
  19. ??
  20. ????/**?
  21. ?????*?本地上傳文件到FTP服務器?
  22. ?????*??
  23. ?????*?@param?ftpPath?
  24. ?????*????????????遠程文件路徑FTP?
  25. ?????*?@throws?IOException?
  26. ?????*/??
  27. ????public?void?upload(String?ftpPath,?String?ftpUserName,?String?ftpPassword,??
  28. ????????????String?ftpHost,?int?ftpPort,?String?fileContent,??
  29. ????????????String?writeTempFielPath)?{??
  30. ????????FTPClient?ftpClient?=?null;??
  31. ????????logger.info("開始上傳文件到FTP.");??
  32. ????????try?{??
  33. ????????????ftpClient?=?FTPUtil.getFTPClient(ftpHost,?ftpPassword,??
  34. ????????????????????ftpUserName,?ftpPort);??
  35. ????????????//?設置PassiveMode傳輸??
  36. ????????????ftpClient.enterLocalPassiveMode();??
  37. ????????????//?設置以二進制流的方式傳輸??
  38. ????????????ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);??
  39. ????????????//?對遠程目錄的處理??
  40. ????????????String?remoteFileName?=?ftpPath;??
  41. ????????????if?(ftpPath.contains("/"))?{??
  42. ????????????????remoteFileName?=?ftpPath??
  43. ????????????????????????.substring(ftpPath.lastIndexOf("/")?+?1);??
  44. ????????????}??
  45. ????????????//?FTPFile[]?files?=?ftpClient.listFiles(new??
  46. ????????????//?String(remoteFileName));??
  47. ????????????//?先把文件寫在本地。在上傳到FTP上最后在刪除??
  48. ????????????boolean?writeResult?=?write(remoteFileName,?fileContent,??
  49. ????????????????????writeTempFielPath);??
  50. ????????????if?(writeResult)?{??
  51. ????????????????File?f?=?new?File(writeTempFielPath?+?"/"?+?remoteFileName);??
  52. ????????????????InputStream?in?=?new?FileInputStream(f);??
  53. ????????????????ftpClient.storeFile(remoteFileName,?in);??
  54. ????????????????in.close();??
  55. ????????????????logger.info("上傳文件"?+?remoteFileName?+?"到FTP成功!");??
  56. ????????????????f.delete();??
  57. ????????????}?else?{??
  58. ????????????????logger.info("寫文件失敗!");??
  59. ????????????}??
  60. ????????}?catch?(Exception?e)?{??
  61. ????????????e.printStackTrace();??
  62. ????????}finally{??
  63. ????????????try?{??
  64. ????????????????ftpClient.disconnect();??
  65. ????????????}?catch?(IOException?e)?{??
  66. ????????????????e.printStackTrace();??
  67. ????????????}??
  68. ????????}??
  69. ????}??
  70. ??
  71. ????/**?
  72. ?????*?把配置文件先寫到本地的一個文件中取?
  73. ?????*??
  74. ?????*?@param?ftpPath?
  75. ?????*?@param?str?
  76. ?????*?@return?
  77. ?????*/??
  78. ????public?boolean?write(String?fileName,?String?fileContext,??
  79. ????????????String?writeTempFielPath)?{??
  80. ????????try?{??
  81. ????????????logger.info("開始寫配置文件");??
  82. ????????????File?f?=?new?File(writeTempFielPath?+?"/"?+?fileName);??
  83. ????????????if(!f.exists()){??
  84. ????????????????if(!f.createNewFile()){??
  85. ????????????????????logger.info("文件不存在,創建失敗!");??
  86. ????????????????}??
  87. ????????????}??
  88. ????????????BufferedWriter?bw?=?new?BufferedWriter(new?FileWriter(f,?true));??
  89. ????????????bw.write(fileContext.replaceAll("\n",?"\r\n"));??
  90. ????????????bw.flush();??
  91. ????????????bw.close();??
  92. ????????????return?true;??
  93. ????????}?catch?(Exception?e)?{??
  94. ????????????logger.error("寫文件沒有成功");??
  95. ????????????e.printStackTrace();??
  96. ????????????return?false;??
  97. ????????}??
  98. ????}??
  99. }??

5.建立一個測試類FTPMain.java
[java]?view plaincopy
  1. package?com.metarnet.ftp.main;??
  2. ??
  3. import?java.io.InputStream;??
  4. import?java.util.Properties;??
  5. ??
  6. import?org.apache.log4j.Logger;??
  7. ??
  8. import?com.metarnet.ftp.read.ReadFTPFile;??
  9. import?com.metarnet.ftp.util.FTPUtil;??
  10. import?com.metarnet.ftp.write.WriteFTPFile;??
  11. ??
  12. public?class?FTPMain?{??
  13. ??????
  14. ????private?static?Logger?logger?=?Logger.getLogger(FTPMain.class);??
  15. ??
  16. ????public?static?void?main(String[]?args)?{??
  17. ????????int?ftpPort?=?0;??
  18. ????????String?ftpUserName?=?"";??
  19. ????????String?ftpPassword?=?"";??
  20. ????????String?ftpHost?=?"";??
  21. ????????String?ftpPath?=?"";??
  22. ????????String?writeTempFielPath?=?"";??
  23. ????????try?{??
  24. ????????????InputStream?in?=?FTPUtil.class.getClassLoader()??
  25. ????????????????????.getResourceAsStream("env.properties");??
  26. ????????????if?(in?==?null)?{??
  27. ????????????????logger.info("配置文件env.properties讀取失敗");??
  28. ????????????}?else?{??
  29. ????????????????Properties?properties?=?new?Properties();??
  30. ????????????????properties.load(in);??
  31. ????????????????ftpUserName?=?properties.getProperty("ftpUserName");??
  32. ????????????????ftpPassword?=?properties.getProperty("ftpPassword");??
  33. ????????????????ftpHost?=?properties.getProperty("ftpHost");??
  34. ????????????????ftpPort?=?Integer.valueOf(properties.getProperty("ftpPort"))??
  35. ????????????????????????.intValue();??
  36. ????????????????ftpPath?=?properties.getProperty("ftpPath");??
  37. ????????????????writeTempFielPath?=?properties.getProperty("writeTempFielPath");??
  38. ??????????????????
  39. ????????????????ReadFTPFile?read?=?new?ReadFTPFile();??
  40. ????????????????String?result?=?read.readConfigFileForFTP(ftpUserName,?ftpPassword,?ftpPath,?ftpHost,?ftpPort,?"huawei_220.248.192.200.cfg");??
  41. ????????????????System.out.println("讀取配置文件結果為:"?+?result);??
  42. ??????????????????
  43. ????????????????WriteFTPFile?write?=?new?WriteFTPFile();??
  44. ????????????????ftpPath?=?ftpPath?+?"/"?+?"huawei_220.248.192.200_new1.cfg";??
  45. ????????????????write.upload(ftpPath,?ftpUserName,?ftpPassword,?ftpHost,?ftpPort,?result,?writeTempFielPath);??
  46. ????????????}??
  47. ????????}?catch?(Exception?e)?{??
  48. ????????????e.printStackTrace();??
  49. ????????}??
  50. ????}??
  51. }??


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451143.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451143.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘一線互聯網企業 前端JavaScript高級面試

第1章 課程介紹本章主要介紹課程的知識大綱,每個章節的解決順序和主要內容。1-1 導學1-2 課程重要提示1-3 架構 第2章 ES6 語法本章主要講解工作中最常用的 ES6 語法,包括 Module Class Promise 等語法,還會介紹使用 babel webpack rollup 來…

Java IO類庫之ObjectInputStream和ObjectOutPutStream

2019獨角獸企業重金招聘Python工程師標準>>> 一、ObjectOutputStream 1 - ObjectOuputStream介紹 ObjectOutputStream(對象字節輸出流),用于將一個序列化對象寫入到創建ObjectOutputStream時傳入的底層字節輸入流中,通過源碼可知該類繼承Outp…

什么是覆蓋索引?如何利用覆蓋索引進行SQL語句優化?

如果你不知道什么是覆蓋索引,那么SQL性能優化便無從談起! 什么是覆蓋索引?如何利用索引進行SQL語句優化? 表結構 150多萬的數據,這么一個簡單的語句: 慢查詢日志里居然很多用了1秒的,Explain的結果是&am…

ARM的商業模式是如何煉成的?

導讀:保守、嚴謹,又有一些皇族氣質,作為一家擁有純正英國血統的公司,ARM看似呆板的作風卻讓其在移動互聯網大潮中勢如破竹,沒有對手。也許過于看重產業鏈伙伴的聲音,導致ARM的決策有些遲緩,比如…

java 將一段時間分割為兩個連續的時間

eg: 20180901 -- 20180930 ->>>> 20180901-20180915 && 20180916-20180930 /*** 獲取兩日期相差天數** param beginDateStr 時間起點* param endDateStr 時間終點* param TimeType 時間類型 yyyy-MM-dd || yyyyMMdd || ....* return long /天數*/public …

java 中 FtpClient 實現 FTP 文件上傳、下載

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 源代碼大部分是網上找的,查來查去,找到幾個可以用的例子,改來改去,揉合成現在這個樣子。…

MongDB集合文檔操作符

一、MongoDB - 連接1.啟動 MongoDB 服務只需要在 MongoDB 安裝目錄的 bin 目錄下執行 mongod 即可執行啟動操作后,mongodb 在輸出一些必要信息后不會輸出任何信息,之后就等待連接的建立,當連接被建立后,就會開始打印日志信息。可以…

LIMIT M,N分頁性能優化方案

利用子查詢優化 說明: MySQL 并不是跳過 offset 行,而是取 offsetN 行,然后返回放棄前 offset 行,返回 N 行,那當 offset 特別大的時候,此時使用limit m,n效率就非常的低下。想要提升性能要么控制返回的總頁數&#…

PHP獲取文件后綴名

PHP獲取文件后綴名是PHP學習者常見的一種操作,無論是在面試過程中還是PHP新手自學中。PHP獲取文件后綴名都是很普遍的需要掌握的一個知識點。下面我們就給大家總結介紹PHP獲取文件擴展名也就是后綴名的兩種方法!一、通過pathinfo首先大家應該知道pathinf…

Web Service 簡單實例(java 版本) ,IDE自動生成客戶端代碼方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、客戶端工程 jar 包 : 二、1. 服務端:( new 一個web service project ) package com;import javax.jws.…

最佳Linux服務器發行版

一款Linux發行版就如同一件衣服一樣,適合自己的才是最好的選擇。 對大型企業而言,當然首選Red Hat Enterprise Linux(RHEL)。Red Hat有完善的技術支持服務,而且在我們周圍,非常容易找到持有Red Hat認證的技…

在線代碼編輯器 Codemirror 的輕量級 React 組件

代碼編輯器 CodeMirror 的輕量級 React 組件 demo uiw-react.github.io/react-codem… 特性: ? 自動根據 mode 配置加載 mode 文件。 ? 快速簡單的配置 API。 安裝 npm install uiw/react-codemirror --save 復制代碼使用 import CodeMirror from uiw/react-codemirror; impo…

「機械」4大傳動方式優劣對比:機械、電氣、氣壓、液壓

傳動方式有很多種。目前應用比較多的四大類傳動方式(機械、電氣、液壓和氣壓)中,沒有一種動力傳動是十全十美的。今天跟大家分享4種傳動方式的優劣對比。 一. 機械傳動 1. 齒輪傳動 齒輪傳動是機械傳動中應用最廣的一種傳動形式。它的傳動比較…

一次性獲取多個oracle序列的值,實現關聯表多數據的批量insert

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 業務 要求批量導入不小于10W條數據到 user 表,但是user表在 insert 每條數據的同時要 insert 一條對應數據到 customer表…

開始使用C++11的9個理由

如果你的代碼工作正常并且表現良好,你可能會想知道為什么還要使用C 11。當然了,使用用最新的技術感覺很好,但是事實上它是否值得呢? 在我看來,答案毫無疑問是肯定的。我在下面給出了9個理由,它們分為兩類&a…

MySQL批量update數據(更新的數據值不同)

(一)純mysql: ?UPDATE my_table SETstatus CASE idWHEN 1 THEN 3WHEN 2 THEN 4WHEN 3 THEN 5END,title CASE idWHEN 1 THEN New Title 1WHEN 2 THEN New Title 2WHEN 3 THEN New Title 3END WHERE id IN (1,2,3) (二)mybatis寫法 1:foreach <update id"batchUpd…

webpack+vue-cli 中proxyTable配置接口地址代理

在項目開發的時候&#xff0c;接口聯調的時候一般都是同域名下&#xff0c;且不存在跨域的情況下進行接口聯調&#xff0c;但是當我們現在使用vue-cli進行項目打包的時候&#xff0c;我們在本地啟動服務器后&#xff0c;比如本地開發服務下是 http://localhost:8080 這樣的訪問…

AMQP 協議介紹

RabbitMQ 是遵從AMQP 協議的&#xff0c; 換句話說&#xff0c; RabbitMQ 就是AMQP 協議的Erlang 的實現(當然RabbitMQ 還支持STOMP2 、MQTT3 等協議) 0 AMQP 的模型架構和RabbitMQ 的模型架構是一樣的&#xff0c;生產者將消息發送給交換器&#xff0c;交換器和隊列綁定。當生…

關聯表多數據的批量insert (批量導入,測試19W條數據用時46秒)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、業務需求 &#xff1a;作多個批量導入 &#xff0c;根據業務不同&#xff0c;每條數據導入前作各種驗證&#xff0c; 導入后提示驗證…