我在 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/