- - PR -
Javaでのsort処理について
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-07-25 16:48
Javaでのsort処理について教えて頂きたいことがあります。
listFiles()より、ディレクトリ内のファイルを取得し、取得したリストを 日付でソートをしたいのですが、方法がわかりません。 File filedir = new File("C:¥file"); File[] files = filedir.listFiles(); →filesを日付(lastModified())でソートを行いたいのですが。。。 どなたかご存知の方がいらっしゃいましたら、ご教示お願い 致します。 |
|
投稿日時: 2005-07-25 17:03
LastModifiedでソートするFileFilterを実装すればいいのではないでしょうか?
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileFilter.html |
|
投稿日時: 2005-07-25 17:13
FileFilterでソートができるでしょうか。
Comparator#compare()がintを返すのと違って、 FileFilter#accept()は、booleanを返します。そもそも、パスを比較するためのメソッドですし。 可能であるのでしたら、具体的な方法を教えて頂けませんでしょうか。 さて、一発で片づけてくれるようなメソッドは見あたらないようなので、 File#listFiles()で取得した配列を、 何らかのソート・アルゴリズムでソートするしかないと思います。 |
|
投稿日時: 2005-07-25 17:20
みなさん、早速のご返答ありがとうございます。
やはり、何らかのソート・アルゴリズムでソートするしかないのでしょうか。。。 |
|
投稿日時: 2005-07-25 17:28
ソート・アルゴリズムをゴリゴリ書きたくないのであれば
Collections#sort を利用すれば良いと思う。 利用するためには ・ソートするためのComparatorの実装 ・File[]→List に変換するための実装 が必要なので手間といえば手間ですが。。 |
|
投稿日時: 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(); } } |
|
投稿日時: 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)でソート。 |
|
投稿日時: 2005-07-25 18:02
みなさん、本当にありがとうございます。
ちょっとアルゴリズムを構築してみます。 |
1|2|3
次のページへ»