Java使用FTPClient类读写FTP

发布时间 - 2026-01-11 00:49:04    点击率:

本文实例为大家分享了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; 
  } 
} 

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(); 
  } 
} 

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; 
    } 
  } 
} 

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.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(); 
    } 
  } 
} 

最后肯定是执行,看最后执行结果,OK步骤已讲完。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java  # FTPClient  # FTP  # java实现FTP文件上传与文件下载  # JAVA中使用FTPClient实现文件上传下载实例代码  # java读取ftp中TXT文件的案例  # 配置文件  # 请联系  # 上传文件  # 创建一个  # 不存在  # 写到  # 先把  # 建立一个  # 在上  # 没有找到  # 大家分享  # 写在  # 连接到  # 具体内容  # 大家多多  # 讲完  # 为空  # 中取  # 默认为  # String 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 使用spring连接及操作mongodb3.0实例  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速搭建高效WAP手机网站吸引移动用户?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  如何快速查询网址的建站时间与历史轨迹?  智能起名网站制作软件有哪些,制作logo的软件?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何正确下载安装西数主机建站助手?  JS弹性运动实现方法分析  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  ,怎么在广州志愿者网站注册?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  制作企业网站建设方案,怎样建设一个公司网站?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  中山网站推广排名,中山信息港登录入口?  WordPress 子目录安装中正确处理脚本路径的完整指南  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  ,网页ppt怎么弄成自己的ppt?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何在建站宝盒中设置产品搜索功能?  Laravel如何配置Horizon来管理队列?(安装和使用)  如何用景安虚拟主机手机版绑定域名建站?  如何快速上传自定义模板至建站之星?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Android 常见的图片加载框架详细介绍  常州企业网站制作公司,全国继续教育网怎么登录?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  制作旅游网站html,怎样注册旅游网站?  如何在建站之星绑定自定义域名?  中山网站制作网页,中山新生登记系统登记流程?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  焦点电影公司作品,电影焦点结局是什么?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何利用DOS批处理实现定时关机操作详解