2013-04-10 39 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); 
} 
}