3

したがって、特定のディレクトリ内のすべてのファイルの名前を表示する ListView があります。このアプリケーションはまた、ファイルを削除し、新しいファイルをディレクトリに追加します。

ファイルを作成順に表示したいのですが、File( directory ).listFiles() では常にそうとは限りません。空のディレクトリから開始してファイルの追加を開始すると、最新のファイルが配列の位置 0 に配置され、最も古いファイルの順に昇順になります。ただし、ファイルを削除してから新しいファイルを追加すると、おかしなことになります。ここに例があります...

空のディレクトリから始めて、そこに 4 つのファイルを追加したとします。listFiles() によって返される配列は次のようになります。

位置 0 = ファイル #4 (4 番目に追加)
P 1 = ファイル #3
P 2 = ファイル #2
P 3 = ファイル #1

次に、ファイル #2 と #3 を削除します。配列は次のとおりです。

P 0 = ファイル #4
P 1 = ファイル #1

ここまでは順調ですね。次に、2 つの新しいファイルを追加します。listFiles() によって返される新しい配列は次のようになると思います。

P 0 = ファイル #6
P 1 = ファイル #5
P 2 = ファイル #4
P 3 = ファイル #1

ただし、実際には次のようになります。

P 0 = ファイル #4
P 1 = ファイル #6
P 2 = ファイル #5
P 3 = ファイル #1

しかし、次にファイル #7 を追加すると、新しい配列は次のようになります。

P 0 = ファイル #7
P 1 = ファイル #4
P 2 = ファイル #6
P 3 = ファイル #5
P 4 = ファイル #1

基本的に、ファイルが削除されると、新しいファイルが配列内の「古い位置」を埋めます。新しいファイルが位置 0 に移動する前に、すべての「古い位置」を埋める必要があります。この動作を説明できる人はいますか? また、ファイル配列を目的の時系列順に再ソートするための迅速かつ簡単な方法はありますか?

4

1 に答える 1

7

ファイルのリストを取得するには、File.listFiles()を使用します。ドキュメントには、返されるファイルの順序については保証されないと記載されています。したがって、 File.lastModified()を使用するコンパレータを作成し、これをファイルの配列とともにArrays.sort()に渡す必要あります。

コード:

File[] files = directory.listFiles();

Arrays.sort(files, new Comparator<File>(){
    public int compare(File f1, File f2)
    {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    } });

これを試して、何が起こるか教えてください。

編集:

また、 apache commons IOを見るかもしれません。これには、最後に変更されたコンパレーターと、ファイルを操作するための他の多くの優れたユーティリティが組み込まれています。

于 2012-04-05T06:20:55.040 に答える