2011-08-26 32 views
71

私は以下のようにコードを持っている:File.listFilesをアルファベット順に表示する方法は?

class ListPageXMLFiles implements FileFilter { 

     @Override 
     public boolean accept(File pathname) { 
       DebugLog.i("ListPageXMLFiles", "pathname is " + pathname); 

       String regex = ".*page_\\d{2}\\.xml"; 
       if(pathname.getAbsolutePath().matches(regex)) { 
         return true; 
       } 
       return false; 
     } 
} 

public void loadPageTrees(String xml_dir_path) { 
     ListPageXMLFiles filter_xml_files = new ListPageXMLFiles(); 
     File XMLDirectory = new File(xml_dir_path); 
     for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) { 
       loadPageTree(_xml_file); 
     } 
} 
FileFilterがうまく働いている

が、listFiles()はアルファベットの逆順でファイルをリストアップしているようです。 listFile()にアルファベット順にファイルを一覧表示するように指示する簡単な方法はありますか?

+0

ただ私の答えを編集しました。あなたのニーズに今すぐ合うはずです。 –

+0

コンスタンチンの編集をありがとう。私は最近Androidに取り組んできましたが、その詳細が私の心を崩しました。 ;-) –

+0

regexを使用する代わりに、代わりに.endsWith( "。xml") 'を使用してください。 – Fred

答えて

176

フィルタの有無にかかわらず、listFilesメソッドは、いかなる順序も保証しません。

ただし、配列はArrays.sort()でソートできます。

File[] files = XMLDirectory.listFiles(filter_xml_files); 
Arrays.sort(files); 
for(File _xml_file : files) { 
    ... 
} 

Fileは、デフォルトの種類によって辞書的にパス名に匹敵クラス、であるので、これは動作します。それらを別々にソートしたい場合は、独自のコンパレータを定義することができます。

+0

これはコードの美しい行ですが、Arrays.sort()はIterableではなくvoidを返すようです。私は少し周りを突くだろう。 –

+3

@Thunder Rabbit、私の謝罪!!だから申し訳ありませんが、あなたは正しいです。私はそれをテストするべきだった。私は私の答えを編集しました。 –

+0

ありがとう!それは私のために働く、それは(まだ)かなり簡単です! –

0

私は前の答えはここでそれを行うための最善の方法は別の簡単な方法だと思います。ソートされた結果を印刷するだけです。

String path="/tmp"; 
String[] dirListing = null; 
File dir = new File(path); 
dirListing = dir.list(); 
Arrays.sort(dirListing); 
System.out.println(Arrays.deepToString(dirListing)); 
+1

私はこれを再考してください更新しました。事前にお礼します –

+0

あなたはこれが正解ではないと思われる理由としてコメントをお願いしますか?だから私はそれに応じて修正することができます。 –

+1

-1ファイル配列を文字列配列に変換し、ファイル配列をソートするのではなく、ソートするという利点は、受け入れられた答えと同じです。 – zelanix

関連する問題