日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA使用FTPClient类读写FTP

發(fā)布時間:2023/12/18 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA使用FTPClient类读写FTP 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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




1.首先先導(dǎo)入相關(guān)jar包

2.創(chuàng)建一個連接FTP的工具類FTPUtil.Java

[java]?view plaincopy
  • package?com.metarnet.ftp.util;??
  • ??
  • import?java.io.IOException;??
  • import?java.io.InputStream;??
  • import?java.net.SocketException;??
  • import?java.util.Properties;??
  • ??
  • import?org.apache.commons.net.ftp.FTPClient;??
  • import?org.apache.commons.net.ftp.FTPReply;??
  • import?org.apache.log4j.Logger;??
  • ??
  • public?class?FTPUtil?{??
  • ????private?static?Logger?logger?=?Logger.getLogger(FTPUtil.class);??
  • ??
  • ??????
  • ??????
  • ????/**?
  • ?????*?獲取FTPClient對象?
  • ?????*?@param?ftpHost?FTP主機服務(wù)器?
  • ?????*?@param?ftpPassword?FTP?登錄密碼?
  • ?????*?@param?ftpUserName?FTP登錄用戶名?
  • ?????*?@param?ftpPort?FTP端口?默認(rèn)為21?
  • ?????*?@return?
  • ?????*/??
  • ????public?static?FTPClient?getFTPClient(String?ftpHost,?String?ftpPassword,??
  • ????????????String?ftpUserName,?int?ftpPort)?{??
  • ????????FTPClient?ftpClient?=?null;??
  • ????????try?{??
  • ????????????ftpClient?=?new?FTPClient();??
  • ????????????ftpClient.connect(ftpHost,?ftpPort);//?連接FTP服務(wù)器??
  • ????????????ftpClient.login(ftpUserName,?ftpPassword);//?登陸FTP服務(wù)器??
  • ????????????if?(!FTPReply.isPositiveCompletion(ftpClient.getReplyCode()))?{??
  • ????????????????logger.info("未連接到FTP,用戶名或密碼錯誤。");??
  • ????????????????ftpClient.disconnect();??
  • ????????????}?else?{??
  • ????????????????logger.info("FTP連接成功。");??
  • ????????????}??
  • ????????}?catch?(SocketException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????????logger.info("FTP的IP地址可能錯誤,請正確配置。");??
  • ????????}?catch?(IOException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????????logger.info("FTP的端口錯誤,請正確配置。");??
  • ????????}??
  • ????????return?ftpClient;??
  • ????}??
  • }??

  • 3.編寫一個讀取FTP上文件的類ReadFTPFile.java [java]?view plaincopy
  • package?com.metarnet.ftp.read;??
  • ??
  • import?java.io.BufferedReader;??
  • import?java.io.FileInputStream;??
  • import?java.io.FileNotFoundException;??
  • import?java.io.IOException;??
  • import?java.io.InputStream;??
  • import?java.io.InputStreamReader;??
  • import?java.net.SocketException;??
  • ??
  • import?org.apache.commons.net.ftp.FTPClient;??
  • import?org.apache.log4j.Logger;??
  • ??
  • import?com.metarnet.ftp.util.FTPUtil;??
  • ??
  • public?class?ReadFTPFile?{??
  • ????private?Logger?logger?=?Logger.getLogger(ReadFTPFile.class);??
  • ??
  • ????/**?
  • ?????*?去?服務(wù)器的FTP路徑下上讀取文件?
  • ?????*??
  • ?????*?@param?ftpUserName?
  • ?????*?@param?ftpPassword?
  • ?????*?@param?ftpPath?
  • ?????*?@param?FTPServer?
  • ?????*?@return?
  • ?????*/??
  • ????public?String?readConfigFileForFTP(String?ftpUserName,?String?ftpPassword,??
  • ????????????String?ftpPath,?String?ftpHost,?int?ftpPort,?String?fileName)?{??
  • ????????StringBuffer?resultBuffer?=?new?StringBuffer();??
  • ????????FileInputStream?inFile?=?null;??
  • ????????InputStream?in?=?null;??
  • ????????FTPClient?ftpClient?=?null;??
  • ????????logger.info("開始讀取絕對路徑"?+?ftpPath?+?"文件!");??
  • ????????try?{??
  • ????????????ftpClient?=?FTPUtil.getFTPClient(ftpHost,?ftpPassword,?ftpUserName,??
  • ????????????????????ftpPort);??
  • ????????????ftpClient.setControlEncoding("UTF-8");?//?中文支持??
  • ????????????ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);??
  • ????????????ftpClient.enterLocalPassiveMode();??
  • ????????????ftpClient.changeWorkingDirectory(ftpPath);??
  • ????????????in?=?ftpClient.retrieveFileStream(fileName);??
  • ????????}?catch?(FileNotFoundException?e)?{??
  • ????????????logger.error("沒有找到"?+?ftpPath?+?"文件");??
  • ????????????e.printStackTrace();??
  • ????????????return?"下載配置文件失敗,請聯(lián)系管理員.";??
  • ????????}?catch?(SocketException?e)?{??
  • ????????????logger.error("連接FTP失敗.");??
  • ????????????e.printStackTrace();??
  • ????????}?catch?(IOException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????????logger.error("文件讀取錯誤。");??
  • ????????????e.printStackTrace();??
  • ????????????return?"配置文件讀取失敗,請聯(lián)系管理員.";??
  • ????????}??
  • ????????if?(in?!=?null)?{??
  • ????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(in));??
  • ????????????String?data?=?null;??
  • ????????????try?{??
  • ????????????????while?((data?=?br.readLine())?!=?null)?{??
  • ????????????????????resultBuffer.append(data?+?"\n");??
  • ????????????????}??
  • ????????????}?catch?(IOException?e)?{??
  • ????????????????logger.error("文件讀取錯誤。");??
  • ????????????????e.printStackTrace();??
  • ????????????????return?"配置文件讀取失敗,請聯(lián)系管理員.";??
  • ????????????}finally{??
  • ????????????????try?{??
  • ????????????????????ftpClient.disconnect();??
  • ????????????????}?catch?(IOException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????}??
  • ????????}else{??
  • ????????????logger.error("in為空,不能讀取。");??
  • ????????????return?"配置文件讀取失敗,請聯(lián)系管理員.";??
  • ????????}??
  • ????????return?resultBuffer.toString();??
  • ????}??
  • }??
  • 4.創(chuàng)建一個往FTP上寫入文件的類WriteFTPFile.java

    [java]?view plaincopy
  • package?com.metarnet.ftp.write;??
  • ??
  • import?java.io.BufferedWriter;??
  • import?java.io.File;??
  • import?java.io.FileInputStream;??
  • import?java.io.FileWriter;??
  • import?java.io.IOException;??
  • import?java.io.InputStream;??
  • ??
  • import?org.apache.commons.net.ftp.FTPClient;??
  • import?org.apache.commons.net.ftp.FTPFile;??
  • import?org.apache.log4j.Logger;??
  • ??
  • import?com.metarnet.ftp.util.FTPUtil;??
  • ??
  • public?class?WriteFTPFile?{??
  • ??
  • ????private?Logger?logger?=?Logger.getLogger(WriteFTPFile.class);??
  • ??
  • ????/**?
  • ?????*?本地上傳文件到FTP服務(wù)器?
  • ?????*??
  • ?????*?@param?ftpPath?
  • ?????*????????????遠(yuǎn)程文件路徑FTP?
  • ?????*?@throws?IOException?
  • ?????*/??
  • ????public?void?upload(String?ftpPath,?String?ftpUserName,?String?ftpPassword,??
  • ????????????String?ftpHost,?int?ftpPort,?String?fileContent,??
  • ????????????String?writeTempFielPath)?{??
  • ????????FTPClient?ftpClient?=?null;??
  • ????????logger.info("開始上傳文件到FTP.");??
  • ????????try?{??
  • ????????????ftpClient?=?FTPUtil.getFTPClient(ftpHost,?ftpPassword,??
  • ????????????????????ftpUserName,?ftpPort);??
  • ????????????//?設(shè)置PassiveMode傳輸??
  • ????????????ftpClient.enterLocalPassiveMode();??
  • ????????????//?設(shè)置以二進制流的方式傳輸??
  • ????????????ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);??
  • ????????????//?對遠(yuǎn)程目錄的處理??
  • ????????????String?remoteFileName?=?ftpPath;??
  • ????????????if?(ftpPath.contains("/"))?{??
  • ????????????????remoteFileName?=?ftpPath??
  • ????????????????????????.substring(ftpPath.lastIndexOf("/")?+?1);??
  • ????????????}??
  • ????????????//?FTPFile[]?files?=?ftpClient.listFiles(new??
  • ????????????//?String(remoteFileName));??
  • ????????????//?先把文件寫在本地。在上傳到FTP上最后在刪除??
  • ????????????boolean?writeResult?=?write(remoteFileName,?fileContent,??
  • ????????????????????writeTempFielPath);??
  • ????????????if?(writeResult)?{??
  • ????????????????File?f?=?new?File(writeTempFielPath?+?"/"?+?remoteFileName);??
  • ????????????????InputStream?in?=?new?FileInputStream(f);??
  • ????????????????ftpClient.storeFile(remoteFileName,?in);??
  • ????????????????in.close();??
  • ????????????????logger.info("上傳文件"?+?remoteFileName?+?"到FTP成功!");??
  • ????????????????f.delete();??
  • ????????????}?else?{??
  • ????????????????logger.info("寫文件失敗!");??
  • ????????????}??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}finally{??
  • ????????????try?{??
  • ????????????????ftpClient.disconnect();??
  • ????????????}?catch?(IOException?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??
  • ????/**?
  • ?????*?把配置文件先寫到本地的一個文件中取?
  • ?????*??
  • ?????*?@param?ftpPath?
  • ?????*?@param?str?
  • ?????*?@return?
  • ?????*/??
  • ????public?boolean?write(String?fileName,?String?fileContext,??
  • ????????????String?writeTempFielPath)?{??
  • ????????try?{??
  • ????????????logger.info("開始寫配置文件");??
  • ????????????File?f?=?new?File(writeTempFielPath?+?"/"?+?fileName);??
  • ????????????if(!f.exists()){??
  • ????????????????if(!f.createNewFile()){??
  • ????????????????????logger.info("文件不存在,創(chuàng)建失敗!");??
  • ????????????????}??
  • ????????????}??
  • ????????????BufferedWriter?bw?=?new?BufferedWriter(new?FileWriter(f,?true));??
  • ????????????bw.write(fileContext.replaceAll("\n",?"\r\n"));??
  • ????????????bw.flush();??
  • ????????????bw.close();??
  • ????????????return?true;??
  • ????????}?catch?(Exception?e)?{??
  • ????????????logger.error("寫文件沒有成功");??
  • ????????????e.printStackTrace();??
  • ????????????return?false;??
  • ????????}??
  • ????}??
  • }??

  • 5.建立一個測試類FTPMain.java [java]?view plaincopy
  • package?com.metarnet.ftp.main;??
  • ??
  • import?java.io.InputStream;??
  • import?java.util.Properties;??
  • ??
  • import?org.apache.log4j.Logger;??
  • ??
  • import?com.metarnet.ftp.read.ReadFTPFile;??
  • import?com.metarnet.ftp.util.FTPUtil;??
  • import?com.metarnet.ftp.write.WriteFTPFile;??
  • ??
  • public?class?FTPMain?{??
  • ??????
  • ????private?static?Logger?logger?=?Logger.getLogger(FTPMain.class);??
  • ??
  • ????public?static?void?main(String[]?args)?{??
  • ????????int?ftpPort?=?0;??
  • ????????String?ftpUserName?=?"";??
  • ????????String?ftpPassword?=?"";??
  • ????????String?ftpHost?=?"";??
  • ????????String?ftpPath?=?"";??
  • ????????String?writeTempFielPath?=?"";??
  • ????????try?{??
  • ????????????InputStream?in?=?FTPUtil.class.getClassLoader()??
  • ????????????????????.getResourceAsStream("env.properties");??
  • ????????????if?(in?==?null)?{??
  • ????????????????logger.info("配置文件env.properties讀取失敗");??
  • ????????????}?else?{??
  • ????????????????Properties?properties?=?new?Properties();??
  • ????????????????properties.load(in);??
  • ????????????????ftpUserName?=?properties.getProperty("ftpUserName");??
  • ????????????????ftpPassword?=?properties.getProperty("ftpPassword");??
  • ????????????????ftpHost?=?properties.getProperty("ftpHost");??
  • ????????????????ftpPort?=?Integer.valueOf(properties.getProperty("ftpPort"))??
  • ????????????????????????.intValue();??
  • ????????????????ftpPath?=?properties.getProperty("ftpPath");??
  • ????????????????writeTempFielPath?=?properties.getProperty("writeTempFielPath");??
  • ??????????????????
  • ????????????????ReadFTPFile?read?=?new?ReadFTPFile();??
  • ????????????????String?result?=?read.readConfigFileForFTP(ftpUserName,?ftpPassword,?ftpPath,?ftpHost,?ftpPort,?"huawei_220.248.192.200.cfg");??
  • ????????????????System.out.println("讀取配置文件結(jié)果為:"?+?result);??
  • ??????????????????
  • ????????????????WriteFTPFile?write?=?new?WriteFTPFile();??
  • ????????????????ftpPath?=?ftpPath?+?"/"?+?"huawei_220.248.192.200_new1.cfg";??
  • ????????????????write.upload(ftpPath,?ftpUserName,?ftpPassword,?ftpHost,?ftpPort,?result,?writeTempFielPath);??
  • ????????????}??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • }??

  • 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的JAVA使用FTPClient类读写FTP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。