java再帰的と非再帰的にスキャンフォルダの下のすべてのファイルを実現します。


javaスキャン指定フォルダの下にあるすべてのファイルを参考にしてください。具体的な内容は以下の通りです。
一つのフォルダの下のすべてのファイルをスキャンします。フォルダの階層数は制限されていないので、通常は指定されたフォルダの下のすべてのファイルを巡回するために2つの方法を使います。
  • 再帰方式
  • 非再帰的な方式(キューまたはスタックを用いて実現される)
  • 以下では、再帰的かつ非再帰的な実現を含む2つの方法の実現コードを提供します。コードは以下の通りです。
    javaコード:
    
    package q.test.filescanner; 
     
    import java.io.File; 
    import java.util.ArrayList; 
    import java.util.LinkedList; 
     
    import q.test.filescanner.exception.ScanFilesException; 
     
    /** 
     * @author       
     */ 
    public class FolderFileScanner { 
       
      private static ArrayList<Object> scanFiles = new ArrayList<Object>(); 
       
      /**linkedList  **/ 
      private static LinkedList<File> queueFiles = new LinkedList<File>(); 
       
       
      /** 
       * TODO:                 
       * @return ArrayList<Object> 
       * @author      (LQ) 
       * @time 2017 11 3  
       */ 
      public static ArrayList<Object> scanFilesWithRecursion(String folderPath) throws ScanFilesException{ 
        ArrayList<String> dirctorys = new ArrayList<String>(); 
        File directory = new File(folderPath); 
        if(!directory.isDirectory()){ 
          throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^"); 
        } 
        if(directory.isDirectory()){ 
          File [] filelist = directory.listFiles(); 
          for(int i = 0; i < filelist.length; i ++){ 
            /**        ,         **/ 
            if(filelist[i].isDirectory()){ 
              dirctorys.add(filelist[i].getAbsolutePath()); 
              /**          **/ 
              scanFilesWithRecursion(filelist[i].getAbsolutePath()); 
            } 
            /**    **/ 
            else{ 
              scanFiles.add(filelist[i].getAbsolutePath()); 
            } 
          } 
        } 
        return scanFiles; 
      } 
       
      /** 
       * 
       * TODO:                    
       * @return ArrayList<Object> 
       * @param folderPath                
       * @author      (LQ) 
       * @time 2017 11 3  
       */ 
      public static ArrayList<Object> scanFilesWithNoRecursion(String folderPath) throws ScanFilesException{ 
        File directory = new File(folderPath); 
        if(!directory.isDirectory()){ 
          throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^"); 
        } 
        else{ 
          //             
          File [] files = directory.listFiles(); 
          //         ,      ,     linkedList      
          for(int i = 0; i < files.length; i ++){ 
            if(files[i].isDirectory()){ 
              queueFiles.add(files[i]); 
            }else{ 
              //        scanFiles  
              scanFiles.add(files[i].getAbsolutePath()); 
            } 
          } 
           
          //  linkedList    linkedList 
          while(!queueFiles.isEmpty()){ 
            //  linkedList      
            File headDirectory = queueFiles.removeFirst(); 
            File [] currentFiles = headDirectory.listFiles(); 
            for(int j = 0; j < currentFiles.length; j ++){ 
              if(currentFiles[j].isDirectory()){ 
                //        ,    linkedList  
                queueFiles.add(currentFiles[j]); 
              }else{ 
                scanFiles.add(currentFiles[j].getAbsolutePath()); 
              } 
            } 
          } 
        } 
         
        return scanFiles; 
      } 
    } 
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。