Java使用FTPClient類讀寫FTP
本文實(shí)例為大家分享了Java使用FTPClient類讀寫FTP的具體代碼,供大家參考,具體內(nèi)容如下
1.首先先導(dǎo)入相關(guān)jar包
2.創(chuàng)建一個(gè)連接FTP的工具類FTPUtil.java
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對(duì)象 * @param ftpHost FTP主機(jī)服務(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,用戶名或密碼錯(cuò)誤。"); ftpClient.disconnect(); } else { logger.info("FTP連接成功。"); } } catch (SocketException e) { e.printStackTrace(); logger.info("FTP的IP地址可能錯(cuò)誤,請(qǐng)正確配置。"); } catch (IOException e) { e.printStackTrace(); logger.info("FTP的端口錯(cuò)誤,請(qǐng)正確配置。"); } return ftpClient; } }
3.編寫一個(gè)讀取FTP上文件的類ReadFTPFile.java
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("開始讀取絕對(duì)路徑" + 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 "下載配置文件失敗,請(qǐng)聯(lián)系管理員."; } catch (SocketException e) { logger.error("連接FTP失敗."); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); logger.error("文件讀取錯(cuò)誤。"); e.printStackTrace(); return "配置文件讀取失敗,請(qǐng)聯(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("文件讀取錯(cuò)誤。"); e.printStackTrace(); return "配置文件讀取失敗,請(qǐng)聯(lián)系管理員."; }finally{ try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } }else{ logger.error("in為空,不能讀取。"); return "配置文件讀取失敗,請(qǐng)聯(lián)系管理員."; } return resultBuffer.toString(); } }
4.創(chuàng)建一個(gè)往FTP上寫入文件的類WriteFTPFile.java
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è)置以二進(jìn)制流的方式傳輸 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 對(duì)遠(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(); } } } /** * 把配置文件先寫到本地的一個(gè)文件中取 * * @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.建立一個(gè)測(cè)試類FTPMain.java
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(); } } }
最后肯定是執(zhí)行,看最后執(zhí)行結(jié)果,OK步驟已講完。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java微信公眾號(hào)支付開發(fā)之現(xiàn)金紅包
這篇文章主要為大家詳細(xì)介紹了java微信公眾號(hào)支付開發(fā)之現(xiàn)金紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class&
這篇文章主要介紹了解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class com.fasterxml.jackson.databind.ObjectMapper問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06SpringMVC結(jié)合ajaxfileupload實(shí)現(xiàn)文件無刷新上傳代碼
本篇文章主要介紹了SpringMVC結(jié)合ajaxfileupload實(shí)現(xiàn)文件無刷新上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器
這篇文章主要為大家介紹了java并發(fā)數(shù)據(jù)包使用數(shù)據(jù)交換器Exchanger來進(jìn)行線程之間的數(shù)據(jù)交換。有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03Spring MVC簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。今天先從寫一個(gè)Spring MVC的HelloWorld開始,讓我們看看如何搭建起一個(gè)Spring mvc的環(huán)境并運(yùn)行程序,感興趣的朋友一起學(xué)習(xí)吧2017-08-08帶有@Transactional和@Async的循環(huán)依賴問題的解決
這篇文章主要介紹了帶有@Transactional和@Async的循環(huán)依賴問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04