4

私はAndroid 2.2を使用してBookGenerator.javaFile.list()メソッドを呼び出すと、ページとチャプターは正確な順序で表示されますが、逆ページリストまたは逆ページオーダー。File.list()は、2.2よりも4.0の順番でファイルを返します

2.2と4.0の間に互換性の問題はありますか?

+0

入力した内容を理解するのが苦労しています。もう少し見やすくすることができますか? –

+1

@JasonRobinson ya確かにします。あなたは今それを見ることができます – Rizvan

+0

まだ苦労している。バージョン2.2と2.3ではいくつかの配列が特定のシーケンスで来ると言っていますか?4.0ではそれは逆の順序で来ますか? –

答えて

5

あなたは(LISTFILESに頼るべきではありません)ページの順序付きリストのため:

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#listFiles()

「結果の配列の名前文字列は特定に表示されるという保証はありません注文;"

ファイル名またはlastModifiedまたはファイルのサイズに基づいて独自の注文システムを作成する必要があります。 Comparator < File>またはComparator < String>を使用してSortedSet内のファイルをソートするか、または前述のように、Comparableを実装するソート用のアイテム用の独自のクラスを作成します。私は、この機能のためだけにFileクラスまたはStringクラスを別のクラスにラップするのはちょっと愚かなので、最初の解決策を提案します。メモリのオーバーヘッドの多い

例:

TreeSet<File> pages = new TreeSet<File>(new Comparator<File>(){ 
    public int compare(File first, File second) { 
     return first.getName().compareTo(second.getName()); 
    } 
}); 

for (File file : allFiles) { 
    pages.add(file()); 
} 

allFiles = pages.toArray(); 

あなたはより効率的なものをしたい場合は、その場所で配列をソートするための独自のメソッドを実装する必要があります。

0

Comparableを使って自分でソートします。

+0

uは答えをより説明的に説明できますか? – Rizvan

3

list()メソッドは、アイテムの特定の順序を保証しません。 Androidのドキュメントには、この点を欠いているがJava SE API javadoc関係者はそれについて警告:

結果の配列 の名前文字列は特定の順序で表示されます保証はありません。特に、 がアルファベット順に表示されることはありません。

アレイを使用する前に、Collections.sort()でソートする必要があります。

File fChapters = new File(internalStorage + bookName + "/Chapters"); 
// Obtain the chapters file names list (the files in the directory) 
chapters = fChapters.list(); 
// Sort the file names according to default alphabetic ordering 
Collections.sort(chapters) 
// The chapters list is now sorted from A to Z 

sort(List list, Comparator c)このメソッドのオーバーロードでは、必要な順序を定義できます。たとえば、タイトルの文字の大文字小文字を無視します。

Collections.sort(chapters, new Comparator<String>() { 
    @Override 
    public int compare(String chapter1, String chapter2) { 
     return chapter1.compareToIgnoreCase(chapter2); 
    } 
}); 
+0

あなたはここで言及したソート方法を書き留めることができます、それは私にもっと役立つでしょう。 – Rizvan

+0

こんにちは、私はあなたのコードからスニペットを取った例では。 reverseArray()メソッドを削除して、Collections.sort(章)で呼び出された場所に置き換えてください。それが動作します。 – allprog

+0

これから試してみます – Rizvan

関連する問題