java递归与非递归实现扫描文件夹下所有文件

家电修理 2023-07-16 19:17www.caominkang.com电器维修

java扫描指定文件夹下面的所有文件,供大家参考,具体内容如下

扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件。

  • 递归方式
  • 非递归方式(采用队列或者栈实现)

下面我就给出两种方式的实现代码,包括了递归与非递归实现,code如下所示。

java代码

package q.test.filescanner; 
 
import java.io.File; 
import java.util.ArrayList; 
import java.util.linkedList; 
 
import q.test.filescanner.exception.ScanFilesException; 
 
 
public class FolderFileScanner { 
   
  private static ArrayList scanFiles = ne ArrayList(); 
   
   
  private static linkedList queueFiles = ne linkedList(); 
   
   
   
  public static ArrayList scanFilesWithRecursion(String folderPath) thros ScanFilesException{ 
 ArrayList dirctorys = ne ArrayList(); 
 File directory = ne File(folderPath); 
 if(!directory.isDirectory()){ 
   thro ne 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; 
  } 
   
   
  public static ArrayList scanFilesWithNoRecursion(String folderPath) thros ScanFilesException{ 
 File directory = ne File(folderPath); 
 if(!directory.isDirectory()){ 
   thro ne 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 
   hile(!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; 
  } 
}  
        
        
               
      
    
    

  

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by