• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java使用FTPClient类读写FTP

Java使用FTPClient类读写FTP

作者:kardelpeng 字体:[增加 减小] 来源:互联网 时间:2017-05-28

kardelpeng 通过本文主要向大家介绍了java ftpclient,ftpclient类,ftpclient,ftpclient api,ftpclient jar等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例为大家分享了Java使用FTPClient类读写FTP的具体代码,供大家参考,具体内容如下

1.首先先导入相关jar包

2.创建一个连接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对象 
   * @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; 
  } 
} 
</div>

3.编写一个读取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); 
 
  /** 
   * 去 服务器的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(); 
  } 
} 
</div>

4.创建一个往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服务器 
   * 
   * @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; 
    } 
  } 
} 
</div>

5.建立一个测试类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.FTPU



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java 实现FTP服务实例详解
  • java判断ftp目录是否存在的方法
  • Java使用FTPClient类读写FTP
  • Java 实现FTP服务实例详解
  • java判断ftp目录是否存在的方法
  • Java使用FTPClient类读写FTP

相关文章

  • 2017-05-28Java容器HashMap与HashTable详解
  • 2017-05-28spring boot使用thymeleaf跳转页面实例代码
  • 2017-05-28JSP request.setAttribute()详解及实例
  • 2017-05-28Java 中 Reference用法详解
  • 2017-05-28Java中正则表达式的使用和详解(下)
  • 2017-05-28详解Spring boot上配置与使用mybatis plus
  • 2017-05-28详解Spring Boot集成MyBatis(注解方式)
  • 2017-05-28Spring Data JPA 简单查询--方法定义规则(详解)
  • 2017-05-28Java BigDecimal详解_动力节点Java学院整理
  • 2017-05-28JAVA线程sleep()和wait()详解及实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java中常见的中文乱码总结
    • Java数据结构之队列(动力节点Java学院整理)
    • Java 生产者/消费者问题实例详解
    • java实现随机输出300题四则运算
    • 详解spring多线程与定时任务
    • eclipse java工程改造为java web工程详解
    • 详解spring boot集成RabbitMQ
    • Java数据结构之散列表(动力节点Java学院整理)
    • Java LocalCache 本地缓存的实现实例
    • Java 操作Properties配置文件详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有