如何计算目录中的文件

问题描述:

我正在尝试制作一个搜索方法,它需要一个路径,搜索其文件夹和目录并打印出文件。最后,我希望它能够打印所有文件的数量。如何计算目录中的文件

这里是我的代码:

public static void main(String[] args) { 

    search("C:\\Program Files (x86)\\Adobe"); 

} 
    public static void search(String folderpath){ 
    File directory = new File(folderpath); 
    int numberOfFiles = 0; 
    for (File element : directory.listFiles()){ 
     if(element.isDirectory()){ 
      search(element.getAbsolutePath()); 
     } 
     else{ 
      numberOfFiles++; 
      System.out.println(element); 
     } 
    }; 
    System.out.println(numberOfFiles); 
}; 

的结果是这样的:

folder 
1 
2 
3 
folder2 
1 
folder3 
4 
5 

它从来没有拿出最后一个号码numberOfFiles。 有没有人知道如何阻止它打印numberOfFiles为每个文件夹,并在最后打印一次?

你的方法是递归这是一个好主意,但你不能把它放在方法本身写在递归的终点事(至少这样)。 所以,这是一个可能的更正。制作search一种方法,可以计算出有多少文件(直接文件和其子文件中的文件)。

public static void main(String[] args) {  
    System.out.println("# of files "+search("C:\\Program Files (x86)\\Adobe"));  
} 
public static int search(String folderpath){ 
    File directory = new File(folderpath); 
    int numberOfFiles = 0; 
    for (File element : directory.listFiles()){ 
     if (element.isDirectory()) { // count the files for this subdir 
      numberOfFiles += search(element.getAbsolutePath()); 
     } 
     else { // one more file 
      numberOfFiles++; 
      System.out.println(element); 
     } 
    } 
    // return the number of files for this dir and its sub dirs 
    return numberOfFiles; 
} 

您正在计算当前文件夹中的文件数量并将其存储在本地变量中。由于该方法是递归的,因此您只能获取正在检查的当前文件夹的文件数量。

尝试返回当前文件夹中的文件数加上每个子文件夹中的文件数。然后,在客户端方法中,根据需要使用结果。

下面的代码看起来应该像:

public static void main(String[] args) { 
    String pathToInspect = "C:\\Program Files (x86)\\Adobe" 
    int numberOfFiles = search(pathToInspect); 
    System.out.println("Number of files in " + pathToInspect + ": " + numberOfFiles); 
} 

//changed return type from void to int 
public static int search(String folderpath) { 
    File directory = new File(folderpath); 
    int numberOfFiles = 0; 
    for (File element : directory.listFiles()) { 
     if(element.isDirectory()) { 
      //add the number of files of subfolder 
      numberOfFiles += search(element.getAbsolutePath()); 
     } else { 
      numberOfFiles++; 
     } 
    } 
    //return number of files found 
    return numberOfFiles; 
}