2013-10-21 2 views
0

java.io API를 사용하고 있습니다. 아래의 패턴에 대한 내 디렉터리에 파일이 많이 있습니다. 내가 가장 오래된/또는 최신있는 10 개 파일을 원하는 경우 - java.io API : list method

FilenameFilter fileFilter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 

      return name.matches(filePrefix+"_.*\\."+fileExt); 

     } 
    }; 

    String listFiles [] = dirFile.list(fileFilter); 
     for(int i = 0 ;i < listFiles.length ; i++){ 
     listOfFiles.add(listFiles[i]); 
     // need only 10 files to processed 
     if(i == 10){ 
      break; 
     } 
    } 

나는 내가 예를 들어, 시간을 기준으로 정렬을하고 싶었 경우 what.I 오전에 list 방법을 기반으로 나열하는 얻을 것이다 알고 싶었다.

나는 어떻게 할 것인가?

솔루션 :

Arrays.sort(listFiles, new Comparator<File>() { 

     @Override 
     public int compare(File f1, File f2) { 
      return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified()); 
     } 
    }); 

답변

1

위의 유일한 필터. File.listFiles() 메서드를 사용하는 것이 더 편할 수 있습니다.이 메서드는 File 개체 집합을 반환합니다 (위와 같이 선택적 필터를 제공 할 수 있음). 이러한 개체에는 사용자가 추가로 정렬 할 특성이 있습니다 (아마도 사용자 지정 Comparator을 쓰고 있습니까?). the doc here 및 정렬 자습서 here을 참조하십시오.

+0

당신은 내게이 경우 비교기를 사용하는 방법에 대한 아이디어를 제공하시기 바랍니다 수 있습니다. – VJS

+0

한 번 더 질문 : listFile이 결과를 제공하는 방법. 알파벳 순서, 타임 스탬프 또는 무엇을 기준으로 파일 객체 집합을 반환합니까? 나는 ls -ltr, ls 또는 무작위 출력 – VJS

+0

을 의미합니다. listFiles()는 기본적으로 순서를 지정하지 않습니다. 문서를 참조하십시오. 위에 링크되어 있습니다. 자신 만의 비교기를 작성해야합니다. 다시 한 번 전과 관련 있습니다. –

1

대신 문자열의 파일 개체를 나열 할 'listFiles(fileFilter)'를 사용하여 다음 sort/filter 그들