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,一经查实,立即删除!

相关文章

揭秘一线互联网企业 前端JavaScript高级面试

第1章 课程介绍本章主要介绍课程的知识大纲,每个章节的解决顺序和主要内容。1-1 导学1-2 课程重要提示1-3 架构 第2章 ES6 语法本章主要讲解工作中最常用的 ES6 语法,包括 Module Class Promise 等语法,还会介绍使用 babel webpack rollup 来…

Java IO类库之ObjectInputStream和ObjectOutPutStream

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

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

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

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

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

java 将一段时间分割为两个连续的时间

eg: 20180901 -- 20180930 ->>>> 20180901-20180915 && 20180916-20180930 /*** 获取两日期相差天数** param beginDateStr 时间起点* param endDateStr 时间终点* param TimeType 时间类型 yyyy-MM-dd || yyyyMMdd || ....* return long /天数*/public …

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

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

MongDB集合文档操作符

一、MongoDB - 连接1.启动 MongoDB 服务只需要在 MongoDB 安装目录的 bin 目录下执行 mongod 即可执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。可以…

LIMIT M,N分页性能优化方案

利用子查询优化 说明: MySQL 并不是跳过 offset 行,而是取 offsetN 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,此时使用limit m,n效率就非常的低下。想要提升性能要么控制返回的总页数&#…

PHP获取文件后缀名

PHP获取文件后缀名是PHP学习者常见的一种操作,无论是在面试过程中还是PHP新手自学中。PHP获取文件后缀名都是很普遍的需要掌握的一个知识点。下面我们就给大家总结介绍PHP获取文件扩展名也就是后缀名的两种方法!一、通过pathinfo首先大家应该知道pathinf…

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

在线代码编辑器 Codemirror 的轻量级 React 组件

代码编辑器 CodeMirror 的轻量级 React 组件 demo uiw-react.github.io/react-codem… 特性: ? 自动根据 mode 配置加载 mode 文件。 ? 快速简单的配置 API。 安装 npm install uiw/react-codemirror --save 复制代码使用 import CodeMirror from uiw/react-codemirror; impo…

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

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

一次性获取多个oracle序列的值,实现关联表多数据的批量insert

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 业务 要求批量导入不小于10W条数据到 user 表,但是user表在 insert 每条数据的同时要 insert 一条对应数据到 customer表…

开始使用C++11的9个理由

如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢? 在我看来,答案毫无疑问是肯定的。我在下面给出了9个理由,它们分为两类&a…

MySQL批量update数据(更新的数据值不同)

(一)纯mysql: ​UPDATE my_table SETstatus CASE idWHEN 1 THEN 3WHEN 2 THEN 4WHEN 3 THEN 5END,title CASE idWHEN 1 THEN New Title 1WHEN 2 THEN New Title 2WHEN 3 THEN New Title 3END WHERE id IN (1,2,3) (二)mybatis写法 1:foreach <update id"batchUpd…

webpack+vue-cli 中proxyTable配置接口地址代理

在项目开发的时候&#xff0c;接口联调的时候一般都是同域名下&#xff0c;且不存在跨域的情况下进行接口联调&#xff0c;但是当我们现在使用vue-cli进行项目打包的时候&#xff0c;我们在本地启动服务器后&#xff0c;比如本地开发服务下是 http://localhost:8080 这样的访问…

AMQP 协议介绍

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

关联表多数据的批量insert (批量导入,测试19W条数据用时46秒)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、业务需求 &#xff1a;作多个批量导入 &#xff0c;根据业务不同&#xff0c;每条数据导入前作各种验证&#xff0c; 导入后提示验证…