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.mzph.cn/news/451143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java IO类库之ObjectInputStream和ObjectOutPutStream

2019独角兽企业重金招聘Python工程师标准>>> 一、ObjectOutputStream 1 - ObjectOuputStream介绍 ObjectOutputStream(对象字节输出流),用于将一个序列化对象写入到创建ObjectOutputStream时传入的底层字节输入流中,通过源码可知该类继承Outp…

什么是覆盖索引?如何利用覆盖索引进行SQL语句优化?

如果你不知道什么是覆盖索引,那么SQL性能优化便无从谈起! 什么是覆盖索引?如何利用索引进行SQL语句优化? 表结构 150多万的数据,这么一个简单的语句: 慢查询日志里居然很多用了1秒的,Explain的结果是&am…

ARM的商业模式是如何炼成的?

导读:保守、严谨,又有一些皇族气质,作为一家拥有纯正英国血统的公司,ARM看似呆板的作风却让其在移动互联网大潮中势如破竹,没有对手。也许过于看重产业链伙伴的声音,导致ARM的决策有些迟缓,比如…

java 中 FtpClient 实现 FTP 文件上传、下载

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 源代码大部分是网上找的,查来查去,找到几个可以用的例子,改来改去,揉合成现在这个样子。…

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认证的技…

「机械」4大传动方式优劣对比:机械、电气、气压、液压

传动方式有很多种。目前应用比较多的四大类传动方式(机械、电气、液压和气压)中,没有一种动力传动是十全十美的。今天跟大家分享4种传动方式的优劣对比。 一. 机械传动 1. 齿轮传动 齿轮传动是机械传动中应用最广的一种传动形式。它的传动比较…

AMQP 协议介绍

RabbitMQ 是遵从AMQP 协议的, 换句话说, RabbitMQ 就是AMQP 协议的Erlang 的实现(当然RabbitMQ 还支持STOMP2 、MQTT3 等协议) 0 AMQP 的模型架构和RabbitMQ 的模型架构是一样的,生产者将消息发送给交换器,交换器和队列绑定。当生…

Java已死?九百万程序员说不

Java没死,事实上它拥有足够的能量让你的应用跑起来。那些对Java吹毛求疵人频繁地聚焦在一些小众问题上,总是和其他技术或者语言做些不公平的对比,这些语言并没有像Java一样得到广泛应用及长远的历史。 现在的小孩都能学Java,它在…

CSS中position的absolute和relative用法

static: HTML元素的默认定位方式absolute: 将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位。而其层叠通过z-index属性定义。绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父…

避免流量高峰期CDN问题的10个方法

在视频流媒体中,因平台火爆而出现问题是件好事。至少,这比根本没有观众要好。\\也许你正在使用世界级的CDN,但是,在大型赛事期间,当CDN的服务器和对等点流量变得饱和的时候,一些用户还是无法享受到流畅的体…

Android应用进入爆发期 手机游戏仍是市场重心

近日,91无线发布了《91无线移动应用发展趋势报告(Android版)》。报告显示,2012年,无论Android移动应用用户下载还是开发者研发均呈爆发态势,手机游戏仍是市场重心所在。同时,Android移动应用下载…

WebService中文件传输

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。 1、 首先编写服务器端…

Django框架-Form组件

一、DjangoForm组件介绍 我们之前在html页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如验证用户是否输入,输入的长度和格式等是否正…

主席树的各类模板(区间第k大数【动,静】,区间不同数的个数,区间=k的个数)...

取板粗 好东西来的 1.(HDOJ2665)http://acm.hdu.edu.cn/showproblem.php?pid2665 (POJ2104)http://poj.org/problem?id2104 (POJ2761)http://poj.org/problem?id2761 题意:求区间第K大&…

分享Spring Cloud分布式微服务架构图

分布式、微服务、云架构JAVA语言开发、跨平台、高性能、高可用、安全、服务化、模块化、组件化、驱动式开发模式 从现在开始,我这边会将近期研发的springcloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友&#xff0…

Lyft Level 5 Challenge 2018 - Elimination Round翻车记

打猝死场感觉非常作死。 A&#xff1a;判一下起点和终点是否在其两侧即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x0,…

mysql用户的权限分配

2019独角兽企业重金招聘Python工程师标准>>> 因今天在分配数据库权限的时候&#xff0c;同事反映账户不能使用函数&#xff0c;遂搜集资料总结了一番关于mysql用户的权限分配。 MySQL 赋予用户权限命令的简单格式可概括为&#xff1a; grant 权限 on 数据库对象 to …

小米360口水战背后:国产手机第三态诞生

摘要&#xff1a;按照双方公布的配置信息&#xff0c;小米手机青春版为1.2G H z双核处理器&#xff0c;华为闪耀为1G H z双核。种向市场投入海量推广资金&#xff0c;以换取产品上的高利润&#xff0c;代表为步步高、金立、O PPO。南都制图&#xff1a;宋小伟 互联网入侵通信业…