LinuxにしてもWindowsにしてもファイルの日付(作成日、更新日)は、OSが管理していて取得できるのだが、java.io.Fileでは、getCreateCalendar(),getUpdateCalendar()とかいったメソッドは用意されていない。
いままで、java.io.Fileでは日付情報を取得できないと思っていたが、APIを良く見ると lastModified() というメソッドがあることがわかった。
lastModified()で得た値をCalendarに変換するには以下のようにする。
File f=new File("foo.txt");
cal=Calendar.getInstance();
cal.setTimeInMillis( f.lastModified() );
System.out.println(cal);
lastModified() メソッドを使用して、最終変更日付の取得とそれを基にしたソートテストをしてみます。
import java.io.*;
import java.util.*;
public class Sort{
Comparator comparator=new Comparator(){
public int compare(Object o1,Object o2){
File f1=(File)o1;
File f2=(File)o2;
return (int)(f1.lastModified()-f2.lastModified());
}
};
private File dir;
public Sort(File dir){
this.dir=dir;
}
public void sort(){
File[] files=this.dir.listFiles();
ArrayList list=new ArrayList();
for(int i=0; i<files.length; i++){
list.add(files[i]);
}
Collections.sort(list,this.comparator);
for(int i=0; i<list.size(); i++){
File f=(File)list.get(i);
System.out.println( f.getName()+","+toCalendarString(f) );
}
}
static private String toCalendarString(File f){
Calendar cal=Calendar.getInstance();
cal.setTimeInMillis( f.lastModified() );
int y=cal.get(Calendar.YEAR);
int m=cal.get(Calendar.MONTH);
int day=cal.get(Calendar.DAY_OF_MONTH);
return String.valueOf(y)+"-"+String.valueOf(m+1)+"-"+String.valueOf(day);
}
static public void main(String[] args){
if(args.length==1){
File dir=new File(args[0]);
new Sort(dir).sort();
}
}
}
$ javac Sort.java
$ java Sort ./
カレントディレクトリのファイルを日付順にソートして標準出力します。
MindBoard は 直観的な操作で簡単にマインドマップを描くことができる Android タブレット用アプリです。