Java中的递归(DirectoryAnalyzer)

Java中的递归(DirectoryAnalyzer),java,file,recursion,directory,int,Java,File,Recursion,Directory,Int,基本上,我写了一个程序,将显示一个文件和目录的列表是一个选定的文件夹。 我试图做的是只显示选定文件夹中的一些文件和目录,但它所显示的只是该文件夹中的文件列表。 为了更清楚地解释它,这是我的代码,运行它来理解程序在做什么,我的问题基本上是如何显示该文件夹中的文件和目录的数量 import java.io.File; public class DirectoryAnalyser { public static void main(String[] args) { DirectoryAnal

基本上,我写了一个程序,将显示一个文件和目录的列表是一个选定的文件夹。 我试图做的是只显示选定文件夹中的一些文件和目录,但它所显示的只是该文件夹中的文件列表。 为了更清楚地解释它,这是我的代码,运行它来理解程序在做什么,我的问题基本上是如何显示该文件夹中的文件和目录的数量

import java.io.File;

public class DirectoryAnalyser {
public static void main(String[] args) {
    DirectoryAnalyser stats = new DirectoryAnalyser();
    stats.processFile(".");
    stats.displayStatistics();
}

private int numFiles;
private int numDirectories;

public DirectoryAnalyser() {
    numFiles = 0;
    numDirectories = 0;
}

public void processFile(String file) {
    File root = new File(file);
    File[] list = root.listFiles();
    for (File f : list){
        if(f.isDirectory()){
            processFile(f.getAbsolutePath());
            System.out.println("Dir:" + f.getAbsoluteFile());
        }else if(f.isFile()){
            System.out.println("File:" + f.getAbsoluteFile());
        }
    }
}

public void displayStatistics() {

}
}

您需要使用
processFile(String)
方法计算文件和目录的数量,并在发现后打印。它将类似于:

public void processFile(String file) {
   File root = new File(file);
   File[] list = root.listFiles();
   this.numFiles = 0;
   this.numDirectories = 0;

   for (File f : list) {
       if (f.isDirectory()) {
           numDirectories++;
           processFile(f.getAbsolutePath());
       } else if (f.isFile()) {
           numFiles++;
       }
   }
}

public void displayStatistics() {
    System.out.format("Total of file: %d\nTotal of directories: %d\n", numFiles, numDirectories);
}

如果不在类中保留状态并返回一个包含结果的类,然后打印它,那就更好了。

好的。我给你一个提示

这就是您的
displayStatistics()
方法的外观:

public void displayStatistics() {
   System.out.println("Number of files: " + numFiles);
   System.out.println("Number of directories: " + numDirectories);
}


现在剩下的就是找到适当的位置来增加这两个计数器。

这是我回答问题的完整代码,感谢您的帮助

import java.io.File;

public class DirectoryAnalyser {
public static void main(String[] args) {
    DirectoryAnalyser stats = new DirectoryAnalyser();
    stats.processFile("/Users/ThamerMashhadi/Desktop/");
    stats.displayStatistics();
}

private int numFiles;
private int numDirectories;

public DirectoryAnalyser() {
}

public void processFile(String file) {
    File root = new File(file);
    File[] list = root.listFiles();
    for (File f : list) {
        if (f.isDirectory()) {
            numDirectories++;
            processFile(f.getAbsolutePath());
            // System.out.println("Directories:" + f.getAbsoluteFile());
        } else if (f.isFile()) {
            numFiles++;
            // System.out.println("File:" + f.getAbsoluteFile());
        }
    }
}

public void displayStatistics() {
    System.out.println("Total of file:" + numFiles);
    System.out.println("Total of directories:" + numDirectories);
}
}

你是在问如何增加一个变量吗?是你写的代码,对吗?@bhdrkn当然是我写的代码,你是什么意思!?!我唯一的问题是实际说出循环抛出了多少文件。就是这样,我不知道我基本上需要将全局变量添加到
if
语句谢谢,我讨厌解决方案的答案是一两行。