2015-02-06 3 views
0

Я пытаюсь сделать метод поиска, чтобы он проходил путь, просматривал его папки и каталоги и распечатывал файлы. Кроме того, в конце я хочу, чтобы он печатал количество файлов во всех.Как подсчитать файлы в каталоге

Вот мой код:

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 для каждой папки и просто распечатать его один раз в конце?

ответ

3

Ваш метод является рекурсивным, который является хорошей идеей, но вы не можете написать что-то в конце рекурсии, поместив его в самом методе (по крайней мере, таким образом). Итак, вот возможная коррекция. Сделайте 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; 
} 
4

Вы подсчитываете количество файлов в текущей папке и сохраняете это в локальной переменной. Поскольку метод является рекурсивным, вы получите только количество файлов текущей текущей проверки.

Попробуйте вернуть количество файлов в текущей папке плюс количество файлов в каждой подпапке. Затем, в клиентском методе, используйте результат по мере необходимости.

Вот как код должен выглядеть следующим образом:

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