5

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
4

1 に答える 1

6

は「システム」の順序を使用する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]
于 2012-05-28T10:38:38.143 に答える