2013-08-22 39 views
2

嗨我想根據數字排序目錄列表​​。我有像11-20,1-5,6-10,21-30等命名目錄現在我想根據其中的數字進行排序,以便1至N目錄來順序我的意思是爲了1-5,6-10,11-20,21-30。我正在使用下面的代碼,但它不工作。如何基於整數名稱對目錄進行排序?

File[] dirList = mainDir.listFiles(); 
Arrays.sort(dirList); 

我是新來的文件和目錄在Java操作請幫助提前感謝。

回答

11

以下行:

Arrays.sort(dirList); 

排序使用File#compareTo()方法,通過路徑基本上排序文件文件。

您必須創建的Comparator自定義實現然後調用:

Arrays.sort(dirList, new YourCustomComparator()); 

例如:

Comparator<File> comparator = new Comparator<File>() { 
    @Override 
    public int compare(File o1, File o2) { 
    /* 
    * Here, compare your two files with your own algorithm. 
    * Here is an example without any check/exception catch 
    */ 
    String from1 = o1.getName().split("-")[0]; //For '1-5', it will return '1' 
    String from2 = o2.getName().split("-")[0]; //For '11-20', it will return '11' 

    //Convert to Integer then compare : 
    return Integer.parseInt(from2)-Integer.parseInt(from1); 
    } 
} 

//Then use your comparator to sort the files: 
Arrays.sort(dirList, comparator); 
1

除了Arnauds答案,如果你只是想有目錄,你可以使用文件過濾器另外:

FileFilter filter = new FileFilter() 
{ 
    public boolean accept(File file) { 
    return file.isDirectory(); 
    } 
}; 

File[] dirList = mainDir.listFiles(filter); 
相關問題