使用ftpClient下载ftp上所有文件解析
发布时间 - 2026-01-11 00:47:43 点击率:次需求:最新项目需要,写个小功能,需求就是实时下载ftp指定文件夹下的所有文件(包括子目录)到本地文件夹中,保留文件到目录路径不变。

分析:关键在于实时和下载并保持原目录。实时使用线程的定时调度完成,主要做后者,这显然要使用递归,但是ftp上的文件是不能直接得到相对路径的(恕我才疏学浅,并没有在FTPClient类中找到类似getPath()的方法),因此路径是要自己记录。总体思路有以下:
1、得到所有路径以及子路径:递归遍历所有文件到路径。参数:ftp为FTPClient对象,path为当前的路径,pathArray保存当前的路径,并将此路径集合带到主函数中去
getPath(ftp,path,pathArray);
public static void getPath(FTPClient ftp,String path,ArrayList<String> pathArray) throws IOException{
FTPFile[] files = ftp.listFiles();
for (FTPFile ftpFile : files) {
if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
if(ftpFile.isDirectory()){//如果是目录,则递归调用,查找里面所有文件
path+="/"+ftpFile.getName();
pathArray.add(path);
ftp.changeWorkingDirectory(path);//改变当前路径
getPath(ftp,path,pathArray);//递归调用
path=path.substring(0, path.lastIndexOf("/"));//避免对之后的同目录下的路径构造作出干扰,
}
}
}
2、下载到指定的本地文件夹中,
download(ftp, pathArray, "c:\\download");程序之前出了写错误,为了排查,我把下载分成两部分,第一部分先将所有目录创建完成,在第二个for循环中进行文件的下载。参数:ftp为FTPClient,pathArray为1中带出的路径集合,后面一个String为本地路径
public static void download(FTPClient ftp,ArrayList<String> pathArray,String localRootPath) throws IOException{
for (String string : pathArray) {
String localPath=localRootPath+string;
File localFile = new File(localPath);
if (!localFile.exists()) {
localFile.mkdirs();
}
}
for (String string : pathArray) {
String localPath=localRootPath+string;//构造本地路径
ftp.changeWorkingDirectory(string);
FTPFile[] file=ftp.listFiles();
for (FTPFile ftpFile : file) {
if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
File localFile = new File(localPath);
if(!ftpFile.isDirectory()){
OutputStream is = new FileOutputStream(localFile+"/"+ftpFile.getName());
ftp.retrieveFile(ftpFile.getName(), is);
is.close();
}
}
}
}
测试的主函数,使用的ftpClient为org.apache.commons.net.ftp.FTPClient:
public static void main(String[] args) throws SocketException, IOException {
FTPClient ftp = new FTPClient();
ftp.connect("127.0.0.1");
ftp.login("test","test");
int reply;
reply = ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
ftp.setBufferSize(1024);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
String path="";
ArrayList<String> pathArray=new ArrayList<String>();
getPath(ftp,path,pathArray);
System.out.println(pathArray);
download(ftp, pathArray, "c:\\download");
ftp.logout();
ftp.disconnect();
}
以上所述是小编给大家介绍的使用ftpClient下载ftp上所有文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# ftpclient下载文件
# ftp
# 文件
# FTPClientHelper辅助类 实现文件上传
# 目录操作
# 下载等操作
# JAVA中使用FTPClient实现文件上传下载实例代码
# Java FTPClient实现文件上传下载
# Java FtpClient 实现文件上传服务
# Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
# 递归
# 小编
# 才疏学浅
# 出了
# 夹中
# 在此
# 遍历
# 我把
# 第二个
# 给大家
# 中去
# 将此
# 先将
# 所述
# 两部分
# 带出
# 关键在于
# 要使
# 第一部分
# 给我留言
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
清除minerd进程的简单方法
如何快速建站并高效导出源代码?
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
香港服务器部署网站为何提示未备案?
如何在Windows 2008云服务器安全搭建网站?
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
千库网官网入口推荐 千库网设计创意平台入口
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
如何破解联通资金短缺导致的基站建设难题?
怎么用AI帮你设计一套个性化的手机App图标?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
如何登录建站主机?访问步骤全解析
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
JS中对数组元素进行增删改移的方法总结
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
个人网站制作流程图片大全,个人网站如何注销?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何在阿里云ECS服务器部署织梦CMS网站?
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
JavaScript如何实现类型判断_typeof和instanceof有什么区别
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
JavaScript如何实现音频处理_Web Audio API如何工作?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何用景安虚拟主机手机版绑定域名建站?
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
jquery插件bootstrapValidator表单验证详解
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
如何获取免费开源的自助建站系统源码?
jQuery中的100个技巧汇总
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
高端建站如何打造兼具美学与转化的品牌官网?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
微信小程序 配置文件详细介绍
Laravel如何处理CORS跨域请求?(配置示例)
如何在七牛云存储上搭建网站并设置自定义域名?

