Java 文件夾遍歷與排序

今天的一個需求是查找給定磁盤路徑下的所有SQL文件,導入Sybase IQ。已經有一段時間沒有寫過類似代碼,就此練手紀錄一下。

需求: 尋找給定文件夾中所有的PDF文件

  • 不使用FileFilter

    public class PDFFinder {
        public static void main(String[] args){
            File directory = new File("c:\temp");
            List<File> pdfFiles = getAllPDFFiles(directory);
        }
    
       private static List<File> getAllPDFFiles(File directory){
         List<File> files = new ArrayList<File>();
    
         if(!directory.isDirectory()){
            return Collections.emptyList();
         }
    
         File[] listFiles = directory.listFiles();
         for(File file : listFiles){
            if(file.isFile() && file.getName().endsWith("pdf")){
               files.add(file);
            }        
            else {
              files.addAll(getAllPDFFiles(file));
            }   
          }
          return files;
        }
    }
    
  • 使用FileFilter

        public class PDFFinder {
         public static void main(String[] args){
             File directory = new File("c:\temp");
             List<File> pdfFiles = getAllPDFFiles(directory);
         }
    
         private static List<File> getAllPDFFiles(File directory){
               List<File> files = new ArrayList<File>();
    
               if(!directory.isDirectory()){
                   return Collections.emptyList();
                }
    
                File[] listFiles = directory.listFiles(new FileFilter(){
                           
                          @Override
                          public boolean accept(File pathname){
                                 if(pathname.isFile() && pathname.getName().endsWith("pdf")){
                                      return true;     
                                 }
                                 else {  //include folders
                                      return true;
                                 }
                          }
                 });
    
                File file = null;
                for(int i = 0; i < listFiles.length; i++){
                     file = listFiles[i];
                      if(file.isFile()){
                          files.add(file);
                      }        
                     else {
                          files.addAll(getAllPDFFiles(file));
                     }   
                 }
                return files;
           }
       }
    
  • 文件排序
    需求:文件夾在前,文件在后,并按照A-Z排列

      Collections.sort(pdfFiles, new Comparator<File>(){
            @Override
            public int compare(File obj1, File obj2){
                  if(obj1.isDirectory() && obj2.isFile()){
                       return 1;
                  }
                  else if(obj1.isFile() && obj2.isDirectory()){
                       return -1;
                  }
                  else{
                       return obj1.getName().compareTo(obj2.getName());
                  }
            }
      })
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容