Java 文件夹遍历与排序

今天的一个需求是查找给定磁盘路径下的所有SQL文件,导入Sybase IQ。已经有一段时间没有写过类似代码,就此练手纪录一下。

需求: 寻找给定文件夹中所有的PDF文件

  • 不使用FileFilter

    public class PDFFinder {
        public static void main(String[] args){
            File directory = new File("c:\temp");
            List pdfFiles = getAllPDFFiles(directory);
        }
    
       private static List getAllPDFFiles(File directory){
         List files = new ArrayList();
    
         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 pdfFiles = getAllPDFFiles(directory);
         }
    
         private static List getAllPDFFiles(File directory){
               List files = new ArrayList();
    
               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(){
            @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());
                  }
            }
      })

你可能感兴趣的:(Java 文件夹遍历与排序)