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でのファイルとディレクトリの操作が初めてなので、事前に感謝してください。

4

2 に答える 2

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);
于 2013-08-22T11:35:13.207 に答える
1

Arnauds の回答に加えて、ディレクトリのみが必要な場合は、さらにファイル フィルターを使用できます。

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

File[] dirList = mainDir.listFiles(filter);
于 2013-08-22T11:37:33.387 に答える