使用apache FTPclient使用Collections.sort()对文件进行排序和下载

时间:2013-12-14 14:52:50

标签: java file-io ftp

我使用apache FTPClient使用以下库从FTP站点下载文件

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPFileFilter;

FTP文件夹中的文件格式如下

NNNN_YYYYMMDDHHMMSS.SSS

以下提供了示例:

32345_20131224091824445.zip
42345_20131224091824545.zip
12345_20131224091824145.zip
22345_20131224091824345.zip
52345_20131224091824745.zip
62345_20131224091824645.zip

我目前所做的是使用listDir()方法列出目录中的文件,并将每个文件名添加到ArrayList中。

然后我使用Collections.sort(myArrayOfFileNames)对ArrayList进行排序。这对我来说有用,因为它通过文件名对文件进行排序。

现在我想按文件名(不是系统时间戳)的时间戳对文件进行排序。这意味着在进行排序之前,我必须以某种方式删除之前的所有内容并包括_字符。

鉴于我需要完整的文件名才能在排序后下载文件,我想我应该有一些键,值映射,我将全名存储为键,剥离值为然后,地图中的“值”对值进行排序。我的地图看起来像这样

key                         value
32345_20131224091824445.zip 20131224091824445.zip
42345_20131224091824545.zip 20131224091824545.zip
12345_20131224091824145.zip 20131224091824145.zip
22345_20131224091824345.zip 20131224091824345.zip
52345_20131224091824745.zip 20131224091824745.zip
62345_20131224091824645.zip 20131224091824645.zip

上述解决方案可能会有效,但有更快或更清洁的解决方案,因为我觉得上述解决方案可能不是最好的。

1 个答案:

答案 0 :(得分:1)

使用您的自定义比较器和文件排序列表。实现这个比较器应该很容易,只需对文件名进行子串并对它们进行比较。

List<String> files = new ArrayList<String>();
files.add("42345_20131224091824545.zip");
files.add("12345_20131224091824145.zip");

Collections.sort(files, new Comparator<String>() {
    public int compare(String o1, String o2) {
        String s1 = o1.substring(6, 21);
        String s2 = o1.substring(6, 21);
        return s1.compareTo(s2);
    }
});

PS。您的列表仍将保留原始对象,因此您不需要任何地图同时具有原始文件名和剥离文件名。这是比较器的内部细节。