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批处理实现定时关机操作详解

