我有一个文件夹在Windows / Linux中有以下文件
test_1a.play test_1AA.play test_1aaa.play test-_1AAAA.play
我正在阅读文件和存储它但Windows和Linux给出不同的顺序。 由于我的应用程序在两个平台上运行,我需要一致的顺序(Linux顺序)。 任何build议来解决这个问题。
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]