生活随笔
收集整理的這篇文章主要介紹了
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);?? ?? ?????? ?????? ????? ? ? ? ? ? ? ?? ????public?static?FTPClient?getFTPClient(String?ftpHost,?String?ftpPassword,?? ????????????String?ftpUserName,?int?ftpPort)?{?? ????????FTPClient?ftpClient?=?null;?? ????????try?{?? ????????????ftpClient?=?new?FTPClient();?? ????????????ftpClient.connect(ftpHost,?ftpPort);?? ????????????ftpClient.login(ftpUserName,?ftpPassword);?? ????????????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);?? ?? ????? ? ? ? ? ? ? ? ?? ????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);?? ?? ????? ? ? ? ? ? ?? ????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);?? ?????????????? ????????????ftpClient.enterLocalPassiveMode();?? ?????????????? ????????????ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);?? ?????????????? ????????????String?remoteFileName?=?ftpPath;?? ????????????if?(ftpPath.contains("/"))?{?? ????????????????remoteFileName?=?ftpPath?? ????????????????????????.substring(ftpPath.lastIndexOf("/")?+?1);?? ????????????}?? ?????????????? ?????????????? ?????????????? ????????????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();?? ????????????}?? ????????}?? ????}?? ?? ????? ? ? ? ? ? ?? ????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)容還不錯,歡迎將生活随笔推薦給好友。