FTP中MLST概要解读---解决获取ftpFile为null的另外一种方式
Posted CodingBoy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的另外一种方式的主要内容,如果未能解决你的问题,请参考以下文章