見:http://blog.csdn.net/kardelpeng/article/details/6588284
1.首先先導入相關jar包
2.創建一個連接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主機服務器?
- ?????*?@param?ftpPassword?FTP?登錄密碼?
- ?????*?@param?ftpUserName?FTP登錄用戶名?
- ?????*?@param?ftpPort?FTP端口?默認為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服務器??
- ????????????ftpClient.login(ftpUserName,?ftpPassword);//?登陸FTP服務器??
- ????????????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);??
- ??
- ????/**?
- ?????*?去?服務器的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?"下載配置文件失敗,請聯系管理員.";??
- ????????}?catch?(SocketException?e)?{??
- ????????????logger.error("連接FTP失敗.");??
- ????????????e.printStackTrace();??
- ????????}?catch?(IOException?e)?{??
- ????????????e.printStackTrace();??
- ????????????logger.error("文件讀取錯誤。");??
- ????????????e.printStackTrace();??
- ????????????return?"配置文件讀取失敗,請聯系管理員.";??
- ????????}??
- ????????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?"配置文件讀取失敗,請聯系管理員.";??
- ????????????}finally{??
- ????????????????try?{??
- ????????????????????ftpClient.disconnect();??
- ????????????????}?catch?(IOException?e)?{??
- ????????????????????e.printStackTrace();??
- ????????????????}??
- ????????????}??
- ????????}else{??
- ????????????logger.error("in為空,不能讀取。");??
- ????????????return?"配置文件讀取失敗,請聯系管理員.";??
- ????????}??
- ????????return?resultBuffer.toString();??
- ????}??
- }??
[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服務器?
- ?????*??
- ?????*?@param?ftpPath?
- ?????*????????????遠程文件路徑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);??
- ????????????//?設置PassiveMode傳輸??
- ????????????ftpClient.enterLocalPassiveMode();??
- ????????????//?設置以二進制流的方式傳輸??
- ????????????ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);??
- ????????????//?對遠程目錄的處理??
- ????????????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("文件不存在,創建失敗!");??
- ????????????????}??
- ????????????}??
- ????????????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("讀取配置文件結果為:"?+?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();??
- ????????}??
- ????}??
- }??