在递归方法内的循环中添加计数器 – Java

我有一个方法迭代提供的目录数组并打印出那里的所有音频文件。 我想添加一个计数器来获取总扫描中找到的所有音频文件。 此刻,每当

if(file.isDirectory()){new MusicGetter(path).lookup();} 

条件满足并移动到新文件夹,总计被重置。

谢谢你的帮助 :)

完整方法:

 public void lookup() { File folder = new File(c); //File[] listOfFiles = folder.listFiles(); int count = 0; if(folder.listFiles() == null) { return; } for (File file : folder.listFiles()) { String path = file.getPath(); //in each directory print out the audio files if(path.contains(".mp3") || path.contains(".wav") || path.contains(".flac") || path.contains(".m4a") || path.contains(".ogg") || path.contains(".wma")) { System.out.println(path); count++; } //call method again if the file is a directory if (file.isDirectory()) { new MusicGetter(path).lookup(); } } System.out.println("count is" + count); } 

我会将方法从void更改为返回类型int ,并按如下方式执行:

  public int lookup() { File folder = new File(c); //File[] listOfFiles = folder.listFiles(); int count = 0; if(folder.listFiles() == null) { return count; } for (File file : folder.listFiles()) { String path = file.getPath(); //in each directory print out the audio files if(path.contains(".mp3") || path.contains(".wav") || path.contains(".flac") || path.contains(".m4a") || path.contains(".ogg") || path.contains(".wma")) { System.out.println(path); count++; } //call method again if the file is a directory if (file.isDirectory()) { count += new MusicGetter(path).lookup(); } } return count; System.out.println("count is" + count); } 

您需要将计数存储在对象中并通过方法调用传递对象,以便您可以更新其中的计数,或者您需要将计数存储在某个成员变量中。 请注意,在第二种情况下,您冒着代码不可重入的风险,因为同时两个计数会干扰彼此的结果。

将它从void更改为int以获得返回,如下所示:

 public int lookup() 

当你调用递归部分时,执行以下操作:

 count += new MusicGetter(path).lookup(); 

因此,在每个文件之后添加计数,并在递归部分中返回计数。

不要创建新的MusicGetter – 将其更改为.lookup(File file); 并传递文件。

无论如何,为什么要将File转换为字符串路径?

编辑

这就是我的意思:

 public class MusicGetter { private final File root; private int count = 0; public MusicGetter(File root) { this.root = root; } public void lookup() { lookup(root); System.out.println("count is: " + count); } private void lookup(File folder) { if (folder == null) return; for (File file : folder.listFiles()) { if (file.isDirectory()) { lookup(file); } else if (file.getName().matches(".*\\.(mp3|wav|flac|m4a|ogg|wma)$")) { System.out.println(file); count++; } } } }