java - 使用 apache FTPclient 使用 Collections.sort() 排序和下载文件

标签 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 进行排序。这对我来说非常有效,因为它按文件名对文件进行排序。

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

鉴于我需要完整的文件名才能在排序后下载文件,我想我应该有某种键、值映射,其中我将全名存储为键,将删除的值存储为 map 中的“值”,然后对值进行排序。我的 map 看起来像这样

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

上面的解决方案可能会起作用,但是有没有更快或更干净的解决方案,因为我觉得上面的解决方案可能不是最好的。

最佳答案

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

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。您的列表仍将保留原始对象,因此您不需要任何 map 即可同时具有原始文件名和剥离的文件名。这是比较器的内部细节。

关于java - 使用 apache FTPclient 使用 Collections.sort() 排序和下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20584720/

相关文章:

java - 在 native 代码中使用由 sun.misc.Unsafe.allocateMemory() 分配的内存

java - 带有数据库登录模块的 Wildfly digest 登录配置

c++ - 在 C++ 中将像素数据转换为图像

python - 在文本文件中删除和插入行

java - 在Java中写入隐藏文件

java字符串匹配问题

java - 在反编译的 apk 上恢复启用缩小和 proguard 效果

java - 在 .jsp 文件中显示 .java 的输出

java - FTP 站点有效,但我无法从 Java 程序连接。我得到 java.net.UnknownHostException

visual-studio - 推荐一个Visual Studio FTP部署插件