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 parser
return MLSxEntryParser.parseEntry(entry);
} else {
return null;
}
}
我看源码大概分析出了2点:
1. 此方法调用的是MLST,而listFile调用的是LIST。问题来了:什么是MLST??
2. 代码方法体第4行: String reply = getReplyStrings()[1]; 获取返回码其目的是为了判定FTP服务器是否支持MLST??有些FTPServer不支持?
二、什么是MLST(红色部分)
三、结尾
最近打王者有些沉迷,该反省。
学知识,做技术,不能不求甚解。
FTP中MLST概要解读---解决获取ftpFile为null的另外一种方式的更多相关文章
- spring @Value 获取配置文件为 null 常见的几种方式
第一种方式: xx.properties 属性名称错误,未与@Value("${xxx}") 进行对应 第二种方式: 该类未注入到spring bean容器中 @Component ...
- springMVC中获取request和response对象的几种方式(RequestContextHolder)
springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...
- asp.net Core 获取应用程序所在目录的2种方式
//获取应用程序所在目录的2种方式(绝对,不受工作目录影响,建议采用此方法获取路径).如:d:\Users\xk\Desktop\WebApplication1\WebApplication1\bin ...
- Git中从远程的分支获取最新的版本到本地——两种命令
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge Git fetch origin master git log ...
- 获取或操作DOM元素特性的几种方式
1. 通过元素的属性 可以直接通过元素属性获取或操作特性,但是只有公认的特性(非自定义的特性),例如id.title.style.align.className等,注意,因为在ECMAScript中, ...
- 获取Java线程返回值的几种方式
在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务. 那么怎么获取子线程返回的值呢,我这里总结了三种方式: 主线程等待. Join方法等待. 实现Call ...
- Java通过图片url地址获取图片base64位字符串的两种方式
工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...
- C#快速获取指定网页源码的几种方式,并通过字符串截取函数 或 正则 取指定内容(IP)
//只获取网页源码开始到标题位目的进行测试 //第一种方式经过测试,稍微快点 string url = "http://www.ip.cn"; HttpWebRequest req ...
- C#动态获取本机可用串口的两种方式
1. private void GetSerialPort() //获取串口列表 { RegistryKey keyCom = Registry.LocalMachine.OpenSubKey(&qu ...
随机推荐
- Android OS体系结构详解
Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件. 架构详解 下 ...
- css基础学习---简单理解
1:在css中定义图片相对路径 #primary-nav { //相对路径 background: url(../images/alert-overlay.png) repeat-x; height: ...
- JavaScript重新介绍
本文转载自 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript 引言 为什么 ...
- 如何写一手漂亮的 Vue
前几日听到一句生猛与激励并存,可怕与尴尬同在,最无奈也无解的话:"90后,你的中年危机已经杀到".这令我很受触动.显然,这有些夸张了,但就目前这日复一日的庸碌下去,眨眼的功夫,那情 ...
- MCMC(四)Gibbs采样
MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)MCMC采样和M-H采样 MCMC(四)Gibbs采样 在MCMC(三)MCMC采样和M-H采样中,我们讲到了M-H采样已经可以很好 ...
- CI框架剖析一
CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,它可以为开发者们建立功能完善的 Web 应用程序.本人使用CI框架有一 ...
- C#中如何给PDF添加可见的数字签名
数字签名广泛用于保护PDF文档,可见数字签名在日常生活中是相当重要的.在这篇文章中我将与大家分享如何给PDF文件添加可见的数字签名. 首先我下载了一个由E-iceblue公司开发的免费版的PDF组件- ...
- 老李分享:pep8 python代码规范
老李分享:pep8 python代码规范 什么是PEPPEP是 Python Enhancement Proposal 的缩写,翻译过来就是 Python增强建议书 . PEP8 译者:本文基于 20 ...
- MVC 5 + EF6 完整教程15 -- 使用DI进行解耦
如果大家研究一些开源项目,会发现无处不在的DI(Dependency Injection依赖注入). 本篇文章将会详细讲述如何在MVC中使用Ninject实现DI 文章提纲 场景描述 & 问题 ...
- “this kernel requires an x86-64 CPU, but only detects an i686 CPU, unable to boot” 问题解决
1. 问题描述: 在Virtual Box上安装 Ubuntu 系统时出现错误(如题),VIrtual Box 上也没有64位操作系统的选项 2.原因分析: (1) 可能 BIOS 的 Virtua ...