2015-02-06 85 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; 
} 
相關問題