-1

複数のファイルを含むディレクトリがあります。変更日の違いでファイルを並べ替えたい。

例えば

file1.csv  (created 14:00:55)
file2.csv  (created 14:02:55)
file3.csv  (created 15:22:55)
file4.csv  (created 15:25:55)
file5.csv  (created 16:28:55)

設定時刻との比較file1例 13:59(ファイル1=1分差)、file1file2ファイル2=2分差)、file2file3ファイル3=1時間20分差)、file3file4ファイル4=3分差)file4file5(ファイル 5 = 1 時間の差)。そして、違いに従ってそれらをリストします。リストは次のようになります。

file3.csv  (created 15:22:55)
file5.csv  (created 14:28:55)
file4.csv  (created 15:25:55)
file1.csv  (created 14:00:55)
file2.csv  (created 15:02:55)
4

1 に答える 1

3

これの秘訣は、リストのソートに使用される値とともに、ファイル (名前と実際の変更時間) をオブジェクトにカプセル化することです。つまり、次のようにします。

  1. 差分を計算する順序でファイル エントリを読み取ります (ファイル名または変更時間)。
  2. それらをコレクション内のオブジェクトにロードし、並べ替えに使用する値を計算します。ソート値をオブジェクトに設定します。
  3. 計算値に基づいてコレクションを並べ替える

元の順序がファイル名順で、開始時間が 13:59:00 であると仮定して、データを使用します。

Original                        Calculated
Data                            Sort Key
-----------------------------   ----------
file1.csv  (created 14:00:55)      1:55
file2.csv  (created 14:02:55)      1:00
file3.csv  (created 15:22:55)     20:00
file4.csv  (created 15:25:55)      5:00
file5.csv  (created 16:28:55)      3:00

「計算されたソートキー」列(降順)でソートすると、必要なものが得られます。

これはJavaのサンプルです(テストされていません):

class FileWithTimeOffset implements Comparable<FileWithTimeOffset>
{
    String fileName;
    Date   creationDate;
    int    timeOffset;
    public int compareTo(FileWithTimeOffset other)
    {
        // return negative of comparison to achieve descending sort
        return -Integer.compare(this.timeOffset,other.timeOffset);
    }
}
于 2012-09-21T23:21:22.183 に答える