當我運行這個方法時,我立即得到一個堆棧溢出異常,所以顯然該方法一直遞歸調用自己,但我不知道爲什麼。作爲參考的文件結構我與測試它是文件夾的負載,並在這些文件夾是文件,沒有其他文件夾來自遞歸目錄遍歷的堆棧溢出錯誤
public void files(File[] f)
{
if(f == null){
return;
}
else
{
for(int i = 0; i < f.length; i++)
{
if(f[i].isFile() && (f[i].getName().contains(".mp3") || f[i].getName().contains(".m4a"))) //iterate through files and check if each file matches the required criteria
{
String fullname = f[i].getName();
Log.v("full name", fullname);
String name = null;
if(fullname.contains(".mp3"))
{
name = fullname.substring(0, fullname.lastIndexOf(".mp3"));
}
else if(fullname.contains(".m4a")) //Removing file extensions of music file so they can be displayed using an appropriate name
{
name = fullname.substring(0, fullname.lastIndexOf(".m4a"));
}
list.add(name);
mp3.add(f[i]);
Log.v("added", name);
}
if(f[i].isDirectory())
{
File inner[] = files[i].listFiles();
files(inner);
}
}
}
}
我會做的第一件事是添加更多的日誌記錄。接下來我要做的是將遞歸調用改爲接受*一個*文件 - 僅僅因爲處理起來更簡單。 – 2014-09-05 20:57:50
嘗試使用4個文件夾和相當多的文件,並工作 – EatBearsForBreakfast 2014-09-05 21:15:28