在递归方法内的循环中添加计数器 – 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++; } } } }