FTP中MLST概要解读---解决获取ftpFile为null的另外一种方式
零、引言
之前写FTP工具库,用的是ftp4j,他使用其他非常简单方便,但是在细节上提供的可选项比较少(当然也可能是我了解不够深刻)
最新的项目重写了FTP工具类,选择了apache net中的ftp库,选择apache的原因有如下几个:1是我相信apche 2是它的注释完善(apache的代码注释值得每一位程序猿学习) 3是提供的可选配置(FTPConfig)有跟多选择(比如主动被动模式,断点续传等)。
本人在使用ftp4j判定文件是否存在的时候,通过API(具体那个忘了)获取FTPFile对象时,在部分FTP服务时(filezilla)会遇到返回值为null的问题(备注:原因是时间格式化的问题),当时解决判定文件是否存在改用只通过获取文件名来解决。
本次改用apache net的时候,在使用API listFiles() 获取的也是null,经过详细查看源码,发现了一个API是 mlistFile() 这样获取结果OK。
一、Apache的mlistFile源码分析
源码如下:
/*** Get file details using the MLST command** @param pathname the file or directory to list, may be {@code null}* @return the file details, may be {@code null}* @throws IOException on error* @since 3.0*/public FTPFile mlistFile(String pathname) throws IOException{boolean success = FTPReply.isPositiveCompletion(sendCommand(FTPCmd.MLST, pathname));if (success){ String reply = getReplyStrings()[1]; //5:check/* check the response makes sense.* Must have space before fact(s) and between fact(s) and filename* Fact(s) can be absent, so at least 3 chars are needed.*/if (reply.length() < 3 || reply.charAt(0) != ' ') {throw new MalformedServerReplyException("Invalid server reply (MLST): '" + reply + "'");}String entry = reply.substring(1); // skip leading space for parserreturn MLSxEntryParser.parseEntry(entry);} else {return null;}}
我看源码大概分析出了2点:
1. 此方法调用的是MLST,而listFile调用的是LIST。问题来了:什么是MLST??
2. 代码方法体第4行: String reply = getReplyStrings()[1]; 获取返回码其目的是为了判定FTP服务器是否支持MLST??有些FTPServer不支持?
二、什么是MLST(红色部分)
三、结尾
最近打王者有些沉迷,该反省。
学知识,做技术,不能不求甚解。
转载于:https://www.cnblogs.com/LiuChunfu/p/6804437.html
FTP中MLST概要解读---解决获取ftpFile为null的另外一种方式相关推荐
- spring @Value 获取配置文件为 null 常见的几种方式
第一种方式: xx.properties 属性名称错误,未与@Value("${xxx}") 进行对应 第二种方式: 该类未注入到spring bean容器中 @Component ...
- OpenWrt 获取 WAN口 IPv4的IP 两种方式
文章目录 OpenWrt 获取 WAN口 IPv4的IP 两种方式 前言 1.ifconfig获取 2.ubus获取 后话 OpenWrt 获取 WAN口 IPv4的IP 两种方式 前言 ssh连接到 ...
- datagridview后台获取选中行的值的几种方式
1.双击datagridview中的一行,后台获取改行的一个或多个列 private void dgvImport_DoubleClick(object sender, EventArgs e){st ...
- 反射_获取字节码Class对象的三种方式
* 获取Class对象的方式: 1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 * 多用于配置文件,将类名定义在配置文件中.读取 ...
- C#获取本机IP地址的4种方式
1.使用 Dns.GetHostEntry() 函数获取本地 IP 地址 Dns 类获取与 Internet 上的主机有关的信息.在 C# 中,Dns 类中有很多方法可以实现 DNS 相关功能.其中 ...
- Java通过图片url地址获取图片base64位字符串的两种方式
工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...
- node.js 获取异步方法里面的数据 =》 两种方式
第一种: 通过回调函数实现: var fs = require('fs); function getmime(callback){ fs.readFile('./t1.js', function(er ...
- Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)
第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngin ...
- Linux中vim编辑文件显示行号(临时和永久两种方式)
一.前言 在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式. 本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...
最新文章
- CUDA刷新器:CUDA编程模型
- 计算机二级的考试c模板,2013年9月全国计算机等级《二级C++》上机模考试卷(5)
- windows server 2008R2 上安装配置freesshd
- c语言 amp 位与 什么意思,C语言中amp;是什么意思?--龙方网络
- platform设备驱动全透析
- 常用UI模板,loading框,提醒框,弹框确认框
- 想学IT的必看!深度解析跳槽从开始到结束完整流程万字长文!
- 每日一道剑指offer-替换空格
- 【背包问题】基于matlab量子免疫克隆算法求解背包问题【含Matlab源码 424期】
- 深度之眼 alexnet_AlexNet带给了深度学习的世界
- Web前端第三季(JavaScript):十二:第4章: 表单校验案例:401-开发注册表单页面+402-表单提交事件和获取html元素+403-完成用户名和邮箱的校验
- phpstudy配置sg11
- 前端基础——html5新增标签
- 关于书面辞职报告和试用期离职
- android 调用系统打印
- JAVA进行图片压缩
- Spinach和发牌姬
- UML建模-业务流程分析
- bat批处理循环执行adb命令,非科班面试之旅
- 计算机word操作试题,计算机一级Word操作题及答案