我试图在递归中列出我的ftp帐户中的所有文件夹和子文件夹。 函数ftpPrintDirsList返回文件夹中的文件夹列表。 如果我有这个文件夹: a / b / c,a / b / d / e,a / f / g /,a / f / g / h,a / f / g / i
我需要得到如下所示的Array List:a,a / b,a / b / c,a / b / d,a / b / d / e,a / f,a / f / g, a / f / g / h,a / f / g / i (订单不一定是这样,但我需要查看所有文件夹)
到目前为止,我被困在这里:
ArrayList<String> fassD = ftpPrintDirsList("/FlashAssets");
ArrayList<String> inner = null;
for (int i = 0; i < fassD.size(); i++) //for each subfolder in FlashAssets
{
inner = ftpPrintDirsList("/FlashAssets/"+fassD.get(i)); //list all subfolders
for (int j = 0; j < inner.size(); j++)
{
inner.set(j, fassD.get(i)+"/"+inner.get(j));
fassD.addAll(inner);
}
}
Log.d(TAG, "Final: "+fassD);
但是我得到一个无限循环,任何人都可以帮助我。 提前谢谢。
答案 0 :(得分:1)
这是一个递归方法,假设ftpPrintDirsList执行它描述的内容。对于每个文件夹,它将自己添加到列表中,然后为所有子文件夹调用该方法。当没有子文件夹时,它会将自己添加到列表中然后返回。这将为您提供文件的深度优先排序。 / a / b / c出现在a / c
之前public ArrayList<String> getFolders(String foldername)
{
ArrayList<String> retval = new ArrayList<String>();
retval.add(foldername);
ArrayList<String> subfolders = ftpPrintDirsList(foldername);
for (String folder : subfolders)
retval.addall(getFolders(foldername + folder));
return retval;
}