没有标准的方法让FTP服务器根据您(或任何)标准对文件进行排序。
尽管某些FTP服务器(尤其是ProFTPD和vsftpd)通过
LIST命令对条目进行排序支持专有标志。
这两个服务器都支持该
-t标志,以按修改时间对文件进行排序:
LIST -t
尽管这不仅是非标准的,但实际上违反了FTP协议。
- 有关ProFTPD支持的所有选项,请参见其手册页:http
- //www.proftpd.org/docs/directives/linked/config_ref_ListOptions.html
需要注意的是vsftpd的仅支持
-a,
-r,
-t,
-F并
-l与含义的ProFTPD相同。
Apache Commons Net没有API向
LIST命令添加标志(唯一的例外,与该问题无关,是
-a标志-
FTPClient.setListHiddenFiles设置时发送)。
您必须重写
FTPClient.getListArguments来插入自己的标志。
再次说明,我看不出使用
Comparator文件排序有什么问题。只需确保使用
FTPClient.mlistDir(),它在内部使用现代
MLSD命令。这样,您将获得精确的时间戳,而不是分钟的-
或更糟的精确时间戳(如过时的
LIST-)
FTPClient.listFiles()。
FTPFile[] remoteFiles = ftpClient.mlistDir(remotePath);Arrays.sort(remoteFiles, Comparator.comparing((FTPFile remoteFile) -> remoteFile.getTimestamp()).reversed());
但是,正如您所评论的,vsftpd不支持
MLSD(ProFTPD 支持)。在那种情况下,这
LIST-t确实是获取精确排序文件的唯一有效方法(尽管这不是标准/便携式方法)。对于每个列出的文件,耗时的调用
MDTM-
除外
FTPClient.getModificationTime。如果没有精确的时间戳,可以执行与上面相同的代码,但是
FTPClient.listFiles()可以。



