- PR -

Javaでのsort処理について

投稿者投稿内容
piyo
常連さん
会議室デビュー日: 2005/05/10
投稿数: 27
投稿日時: 2005-07-25 16:48
Javaでのsort処理について教えて頂きたいことがあります。

listFiles()より、ディレクトリ内のファイルを取得し、取得したリストを
日付でソートをしたいのですが、方法がわかりません。

File filedir = new File("C:¥file");
File[] files = filedir.listFiles();
→filesを日付(lastModified())でソートを行いたいのですが。。。

どなたかご存知の方がいらっしゃいましたら、ご教示お願い
致します。
K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2005-07-25 17:03
LastModifiedでソートするFileFilterを実装すればいいのではないでしょうか?
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileFilter.html
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-07-25 17:13
FileFilterでソートができるでしょうか。
Comparator#compare()がintを返すのと違って、
FileFilter#accept()は、booleanを返します。そもそも、パスを比較するためのメソッドですし。
可能であるのでしたら、具体的な方法を教えて頂けませんでしょうか。

さて、一発で片づけてくれるようなメソッドは見あたらないようなので、
File#listFiles()で取得した配列を、
何らかのソート・アルゴリズムでソートするしかないと思います。
piyo
常連さん
会議室デビュー日: 2005/05/10
投稿数: 27
投稿日時: 2005-07-25 17:20
みなさん、早速のご返答ありがとうございます。
やはり、何らかのソート・アルゴリズムでソートするしかないのでしょうか。。。
MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-07-25 17:28
ソート・アルゴリズムをゴリゴリ書きたくないのであれば

Collections#sort

を利用すれば良いと思う。

利用するためには
・ソートするためのComparatorの実装
・File[]→List に変換するための実装
が必要なので手間といえば手間ですが。。
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2005-07-25 17:36
こんなんでどうでしょう。
(使う時はエラーチェック等足してください)

import java.io.*;
import java.util.*;

public class FileSorter {
  public static void main(String[] args) {

    File f = new File("/usr/bin");
    File[] files = f.listFiles();
    Arrays.sort(files, new LastModifiedComparator());

    //確認
    for (int i = 0; i < files.length; i++) {
      Date d = new Date(files[i].lastModified());
      System.out.println(d.toString() + " " + files[i].getName());
    }
  }
}
class LastModifiedComparator implements Comparator {

  public int compare(Object o1, Object o2) {
    File f1 = (File)o1;
    File f2 = (File)o2;
    return (new Long(f1.lastModified())).compareTo(new Long(f2.lastModified()));
  }

  public boolean equals(Object o1, Object o2) {
    File f1 = (File)o1;
    File f2 = (File)o2;
    return f1.lastModified() == f2.lastModified();
  }
}
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-07-25 17:38
心配されるほど、面倒なことではないと思います。
Googleに「ソート アルゴリズム」と放り込めば、
わかりやすいサイトがいくらでもヒットしますし。
・・・さっきやってみて、これまでソートといえばバブルソートで片づけてきて、
こりゃ、勉強せにゃならん、とあわてたたヤツが約1名いますが。

さて、ソートアルゴリズムを実装するほかに、java.util.Comparatorを利用する方法をふたつ。

1.  まず、Comparatorクラスを実装します。
    Comparator#compare()で、オブジェクトの大小関係判別方法を定義します。
2−A.上記のComparatorインスタンス生成、それを引数に指定して、TreeSetインスタンスを生成。
    各FileインスタンスをTreeSetに放り込む。
2−B.File配列を、Listに格納します。
    java.util.Collections#sord(List, Comparator)でソート。
piyo
常連さん
会議室デビュー日: 2005/05/10
投稿数: 27
投稿日時: 2005-07-25 18:02
みなさん、本当にありがとうございます。

ちょっとアルゴリズムを構築してみます。

スキルアップ/キャリアアップ(JOB@IT)