java - Android列出所有ftp文件夹和子文件夹

标签 java android recursion

我正在尝试以递归方式列出我的 ftp 帐户中的所有文件夹和子文件夹。 函数 ftpPrintDirsList 返回文件夹中文件夹的数组列表。 如果我有这个文件夹: a/b/c、a/b/d/e、a/f/g/、a/f/g/h、a/f/g/i

我需要获取如下所示的数组列表: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);

但是我遇到了无限循环,有人可以帮助我吗? 预先感谢您。

最佳答案

这是一个递归方法,假设 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;
}

关于java - Android列出所有ftp文件夹和子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333776/

相关文章:

java - BufferedReader如何与套接字交互?关于套接字的工作方式

android - 从 Android Studio 停止 Android adb

python - 如何找到二叉树中特定节点的深度?

loops - 如何在 RPG 中免费循环 X 次而不创建变量?

java - 如何查找由java代码引起的 native 内存泄漏?

java - 处理中的列表<String>

java - tools.jar 找不到 OS X

python - 使用 lambda 表达式的递归函数

java - 从 "datetime-local"到 java.sql.Timestamp 的转换

android - 可迭代的 .zip 问题 (rxJava)