Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算目录中的文件数_Java_File - Fatal编程技术网

Java 如何计算目录中的文件数

Java 如何计算目录中的文件数,java,file,Java,File,我正在尝试创建一个搜索方法,它采用一个路径,搜索其文件夹和目录,并打印出文件。最后,我希望它能打印出所有文件的数量 这是我的密码: public static void main(String[] args) { search("C:\\Program Files (x86)\\Adobe"); } public static void search(String folderpath){ File directory = new File(folderpath);

我正在尝试创建一个搜索方法,它采用一个路径,搜索其文件夹和目录,并打印出文件。最后,我希望它能打印出所有文件的数量

这是我的密码:

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,并在最后只打印一次吗?

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

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

下面是代码的外观:

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;
}

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

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

下面是代码的外观:

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;
}

你的方法是递归的,这是一个好主意,但是你不能在递归结束时写东西,至少这样把它放在方法本身。 因此,这里有一个可能的修正。使“搜索”成为一种方法,用于计算直接文件中的文件数及其子文件中的文件数

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) {    
    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;
}