java文件排序在windows和linux中的区别

标签 java windows linux sorting

我在 windows/Linux 中有一个文件夹,里面有以下文件

test_1a.play
test_1AA.play
test_1aaa.play
test-_1AAAA.play

我正在读取文件并存储它但是 windows 和 linux 给出了不同的顺序。由于我的应用程序在两个平台上运行,我需要一致的顺序(Linux 顺序)。任何解决此问题的建议。

File root = new File( path );
File[] list = root.listFiles();
list<File> listofFiles = new ArrayList<File>();
.....
for ( File f : list ) {


...
read and store file in listofFiles
...
}
Collections.sort(listofFiles);

Windows 给我以下命令

test-_1AAAA.play
test_1a.play
test_1AA.play
test_1aaa.play

Linux 给我以下命令

test-_1AAAA.play
test_1AA.play
test_1a.play
test_1aaa.play

最佳答案

您需要实现自己的 Comparator<File>File.compareTo使用“系统”命令。

我认为(未检查)Linux 使用文件名(区分大小写)的“标准”顺序,因此示例实现可能如下所示:

public static void main(String[] args) {
    List<File> files = new ArrayList<File>();
    files.add(new File("test_1a.play"));
    files.add(new File("test_1AA.play"));
    files.add(new File("test_1aaa.play"));
    files.add(new File("test-_1AAAA.play"));

    Collections.sort(files, new Comparator<File>() {
        @Override
        public int compare(File o1, File o2) {
            String p1 = o1.getAbsolutePath();
            String p2 = o2.getAbsolutePath();
            return p1.compareTo(p2);
        }
    });

    System.out.println(files);
}

输出:

[test-_1AAAA.play, test_1AA.play, test_1a.play, test_1aaa.play]

关于java文件排序在windows和linux中的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783195/

相关文章:

windows - 防止 Windows 中的崩溃消息

linux - 使用预置自动安装 linux

linux - Docker 容器中的 HTTPS 服务器

java - 将数组传递给方法

java - 我想在 Java 中使用正则表达式对字符串执行 split(),但想将分隔的标记保留在数组中

java - 调用另一个类中的方法会导致 NullPointerException

c++ - 如何将 CreateWindowEx 限制为仅字母数字输入?

java - 在 java 中添加对 windows 任务栏的贡献 - 类似于笔记本电脑电池小部件

linux - 如何使用 fortran (MKL) 将静态库中的函数打包到 .so 文件中

java - 玩!在我的模板中渲染另一个模板