2012-04-20 22 views
2

作成日に基づいて最新の10個のファイルを読み込もうとしています。java:作成日に基づいてファイルをソート

私はこのコードを試しましたが、動作しません。つまり、新しいファイルを追加したときに出力に新しいファイル名が表示されません。

import java.io.File; 
import java.util.Arrays; 
import java.util.Comparator; 

public class Main { 
    public static void main(String[] args) { 
     File inboxDir = new File("D:\\SPOTO"); 
     File[] files = inboxDir.listFiles(); 
     Arrays.sort(files, new Comparator() 
     { 
     public int compare(Object o1, Object o2) { 
     return new Long(((File)o1).lastModified()).compareTo(new Long(((File) o2).lastModified())); 
     } 

     }); 


     for(int i=0;i<10;i++) 
     { 
      System.out.println(files[i].getName()); 
     } 


    } 
} 

私もApacheのコモンズのIOをしてみましたが、それは働いていないか。これは私のApache CommonsのIOである

を(新しいファイルがそのディレクトリに作成されたときの手段は、新しいファイルが表示されません)バージョン

import org.apache.commons.io.comparator.LastModifiedFileComparator; 

import java.io.File; 
import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) { 
     File dir = new File("c:\\"); 
     File[] files = dir.listFiles(); 

     Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR); 
     for (int i = 0; i < files.length; i++) { 
      File file = files[i]; 
      System.out.printf("File %s - %2$tm %2$te,%2$tY%n= ", file.getName(), 
        file.lastModified()); 
     } 

     Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 
     for (int i = 0; i < files.length; i++) { 
      File file = files[i]; 
      System.out.printf("File %s - %2$tm %2$te,%2$tY%n= ", file.getName(), 
        file.lastModified()); 
     } 
    } 
} 
+1

"D:\ SPOTO"にファイルがありますか? .listfiles()は再帰的にサブディレクトリを走査しません。 – aglassman

答えて

2

は、比較の順序を反転してください。

2

少なくとも通常のJavaバージョンでは、間違った(昇順)ファイルを比較します。私は結果に-1を掛け、最新のファイルを最初に見ています。

return -1* (new Long(((File)o1).lastModified()).compareTo(new Long(((File) o2).lastModified()))); 

タイムスタンプが大きいほど新しいファイルに対応します。これは私が今ローカルでテストのために働く

return new Long(((File)o2).lastModified()).compareTo(new Long(((File) o1).lastModified())); 

+0

掛け合わせるのではなく、比較を正確に行うためにはもっと明らかです:/ –

+0

これは試してみると一番速い方法でした。コンパレータにはリターンとして整数が必要です。 –

+0

ありがとうアレックス、JavaKungFu – user1253847

関連する問題