2011-06-12 162 views
15

我有一個方法,它從位於目錄中的文件讀取內容。但出於功能原因,有必要從最舊的文件(由上次修改的屬性指示)開始,並以最新的文件結束。如何在java中按日期排序目錄中的文件?

這是我如何打開和讀取文件的代碼:

 FilenameFilter filter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
      return name.matches("access_log.*"); 
     } 
    }; 

    File folder = new File("/home/myfiles"); 
    File[] listOfFiles = folder.listFiles(filter); 

    for (int i = 0; i < listOfFiles.length; i++) { 
     String sFileName = listOfFiles[i].getName(); 
     File accessLogFile = new File(aLog.getPath(), sFileName); 
     long time=accessLogFile.lastModified(); 
     // do something with the file 
    } 

大家有一個解決方案如何,我可以很快以日期排序我的文件列表?

+0

http://stackoverflow.com/questions/203030/best-way-to-list-files-in-java-sorted-by-date-modified是否包含您的問題的答案? – sverre 2011-06-12 07:05:04

+0

你有沒有試過FileUtils.dirListByAscendingDate? http://www.rgagnon.com/javadetails/java-0606.html – excanoe 2011-06-12 07:05:54

+1

您似乎對日誌文件感興趣。這些通常以通過文件名進行詞法排序的方式按時間排序。 – 2011-06-12 07:05:56

回答

35

編輯: 在java8:

Arrays.sort(files, (a, b) -> Long.compare(a.lastModified(), b.lastModified()));link

我發現了一些有趣的代碼,非常接近,你需要什麼,看看它(在逃實施只是快速比較的):

File f = new File("/home/myfiles"); 

File [] files = f.listFiles(); 

Arrays.sort(files, new Comparator() 
{ 
    public int compare(Object o1, Object o2) { 

     if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
      return -1; 
     } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
      return +1; 
     } else { 
      return 0; 
     } 
    } 

}); 

您也可以看看這個帖子,看傢伙怎麼解決了這個問題:Best way to list files in Java, sorted by Date Modified?

+0

謝謝 - 這個作品完美! – Ralph 2011-06-12 13:28:16

+1

不客氣 – sfrj 2011-06-12 13:30:31

+1

嗨,你可以生成這個,這將意味着你可以在比較方法中刪除鑄件:Arrays.sort(文件,新比較器(){...}) – 2014-02-03 09:27:01

0

我會使用FileUtils在commons-io找回文件的集合。然後我會應用一個自定義比較器。它應該很容易。