我有一个方法,它遍历提供的目录数组并打印出那里的所有音频文件。我想添加一个计数器,以获得从总扫描中找到的所有音频文件。
目前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);
}
答案 0 :(得分:2)
我会将方法从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);
}
答案 1 :(得分:0)
您需要将计数存储在对象中并通过方法调用传递对象,以便您可以更新其中的计数,或者您需要将计数存储在某个成员变量中。请注意,在第二种情况下,您冒着代码不可重入的风险,因为同时两个计数会干扰彼此的结果。
答案 2 :(得分:0)
不要创建新的MusicGetter - 将其更改为.lookup(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++;
}
}
}
}
答案 3 :(得分:0)
将返回值从void更改为int,如下所示:
public int lookup()
当你调用递归部分时,请执行以下操作:
count += new MusicGetter(path).lookup();
因此,在每个文件后添加计数,并在递归部分返回计数。