【发布时间】:2016-07-02 02:52:14
【问题描述】:
我已经编写了以下代码来连接到远程 FTP 服务器(CentOS 6 中的 vsftp)。 (为简洁起见,这里没有展示异常处理)
FTPClient ftpClient = new FTPClient();
ftpClient.setConnectTimeout(20000);
ftpClient.connect(serverip);
ftpClient.enterLocalPassiveMode();
ftpClient.login(username, password);
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
ftpClient.disconnect();
throw new FTPConnectionClosedException("Unable to connect to FTP server...");
}
FTPFile[] filesList = ftpClient.listFiles();
for (FTPFile tmpFile : filesList) {
if (tmpFile.isDirectory())
continue;
// processing the file
}
if (ftpClient.isConnected())
ftpClient.disconnect();
如果该 FTP 服务器中有 100 个文件,则此 listFiles() 会根据字母顺序给出文件名列表。
A.txt
B.txt
Z.txt
a.txt
z.txt
有没有办法根据修改时间获取文件?(即最旧的文件优先)。这个listFiles() 使用LIST 命令。 有没有其他命令可以根据修改时间列出文件?既然这是一个Linux服务器,我们可以发送一些Linux命令来实现吗?
我已经检查了问题get latest file from ftp。这种方法的问题是我们必须使用Comparator 对文件进行排序,然后重命名并将其移动到不同的文件夹(以修改顺序获取它们)。如果文件超过 1000 个,对它们进行排序将成为一项耗时的操作!
编辑:
而且,检索文件并对其进行排序还有另一个问题。当使用ftpFile.getTimestamp() 时,它没有seconds 信息。它只精确到分钟。
【问题讨论】:
-
@SubOptimal 这与 OP 已有的相同(相似)代码,但用于不同的库(edtFTPj,而不是 Apache Commons)。
-
@MartinPrikryl 我正在寻找一种解决方案,通过它我可以按最后修改的顺序检索列表,而不是获取列表并使用比较器对其进行排序。
-
@MartinPrikryl 我知道它适用于不同的库,但与 OP 的代码相反,它有一个排序工具。在 OPs 代码中看不到。
-
代码在OP所指的问题中:stackoverflow.com/q/3824983/850848
标签: java ftp apache-commons-net