2011-06-12 8 views
15

디렉토리에있는 파일에서 내용을 읽는 방법이 있습니다. 기능상의 이유 때문에 가장 오래된 파일 (lastmodified 속성으로 표시)부터 시작하여 최신 파일로 끝내야합니다.디렉토리의 파일을 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

+0

FileUtils.dirListByAscendingDate를 사용해 보셨습니까? http://www.rgagnon.com/javadetails/java-0606.html – excanoe

+1

로그 파일에 관심이있는 것 같습니다. 이것들은 종종 파일 이름에 의한 어휘 정렬 또한 시간에 따라 정렬되는 방식으로 명명됩니다. –

답변

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; 
     } 
    } 

}); 

또한이 게시물을 볼 수 있습니다, 사람이 문제를 해결하는 방법을 참조하십시오 :

+0

고마워 -이게 완벽 해! – Ralph

+1

Your're welcome – sfrj

+1

안녕하세요,이 방법을 사용하면 비교 방법으로 캐스팅을 제거 할 수 있습니다. Arrays.sort (파일, 새 비교 자 () {...}) –

0

File Collection을 다시 받으려면 commons-io에 FileUtils를 사용합니다. 그런 다음 사용자 지정 비교기를 적용합니다. 꽤 쉬워야합니다.

관련 문제