2013-04-10 49 views
-4

基本上我寫了一個程序,它將顯示文件和目錄列表是一個選定的文件夾。 我想要做的只是顯示一些文件和目錄在該選定的文件夾,但它顯示的是我的文件在該文件夾中的列表。 更清楚地解釋這是我的代碼,並運行它來了解程序正在做什麼,我的問題基本上是如何顯示該文件夾中的文件和目錄的數量。Java中的遞歸(DirectoryAnalyser)

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() { 

} 
} 
+3

你問如何增加一個變量? – SimonC 2013-04-10 14:46:40

+1

你寫了這段代碼,對吧? – bhdrkn 2013-04-10 14:47:49

+0

@bhdrkn當然我寫的代碼,你的意思是什麼!?!我唯一的問題是實際上說出循環拋出了多少文件。這是它,我不知道我基本上需要將全局變量添加到'if'語句 – user2145688 2013-04-10 15:08:56

回答

1

你需要你的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); 
} 

這將是更好,如果你沒有在你的類中的狀態,並返回一個包含結果的類,然後你打印出來。

+0

謝謝你,我討厭它時,解決方案的答案是一兩行。 – user2145688 2013-04-10 15:07:41

+0

現在其他人可以從這個遞歸代碼受益 – user2145688 2013-04-10 15:10:29

0

好的。我會給你一個提示。

這是你displayStatistics()方法應該是什麼樣子:

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

}

現在,所有剩下的工作就是找到合適的地方來增加這兩個計數器。

+0

謝謝你,但我已經解決了我的問題,謝謝你,雖然 – user2145688 2013-04-10 15:11:33

0

這是我對我的問題的答案的完整代碼,並感謝你爲每一個幫助。

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